알고리즘🅰/프로그래머스

[프로그래머스] 같은 숫자는 싫어

개발조각 2022. 2. 16. 23:40
728x90
반응형

2021.12.28에 푼 문제입니다.

 

오랜만에 프로그래머스 연습문제 해결방안을 올리게 됐어요.

이렇게 오랫동안 안 올릴 생각은 아니었는데...

[1차] 다트 게임이 몇 주째 안 풀려서 결국 다른 문제를 풀게 됐어요.😭

 

같은 숫자는 싫어 문제는 어떻게 보면 쉽긴 한데 묘하게 머리 쓰게 만드는 문제인 것 같아요.

이문제가 단순하게 중복을 제거하는 문제가 아니라 연속적인 부분만 제거하는 문제라 조금 까다롭더라고요.

 

 


해결방안

function solution(arr)
{
    var answer = [];
    for(let i=0; i<arr.length; i++){
        if(arr[i] == arr[i+1]){
            continue;
        }else{
            answer.push(arr[i])
        }
    }
    return answer;
}

 

이 문제는 해결하기 위해 for문조건문을 사용해 주었습니다.

간단하게 설명하자면

  1. for문으로 돌려서 배열의 원소가 뭔지 알아내고
  2. 현재 원소와 그 다음번의 원소가 같으면 연속적으로 나타내는 숫자임으로 다음으로 넘기고
  3. 현재원소와 그 다음번의 원소가 같지 않으면 answer배열에 담아 주었습니다.

이것을 코드로 나타내면

  1. for(let i=0; i<arr.length; i++)
  2. if(arr[i] == arr[i+1]){continue;}
  3. if(arr[i] == arr[i+1]){answer.push(arr[i])}

이렇게 됩니다.

 

여기서 2번에서 "다음으로 넘긴다"라는 말은 

테스트 1로 설명하자면 (arr = [1,1,3,3,0,1,1])

i = 0 일 때

  • arr[0] === arr[0+1] -> true

arr[i] == arr[i+1]가 true이기 때문에 continue를 진행하게 됩니다.

"continue을 만나면 i=0은 끝내고 i=1를 진행하면 된다"는 말이 됩니다.

 

테스트 1
arr = [1,1,3,3,0,1,1]

i = 0 일 때
arr[0] === arr[0+1] -> arr[0] === arr[1] -> 1 === 1 -> true
true임으로 continue진행

i = 1 일 때
arr[1] === arr[1+1] -> arr[1] === arr[2] -> 1 === 3 -> false
false임으로 answer.push(arr[i]) 진행
answer.push(arr[i]) -> answer.push(arr[1]) -> answer.push(1)
answer = [1]

i = 2 일 때
arr[2] === arr[2+1] -> arr[2] === arr[3] -> 3 === 3 -> true
true임으로 continue진행

i = 3 일 때
arr[3] === arr[3+1] -> arr[3] === arr[4] -> 3 === 0 -> false
false임으로 answer.push(arr[i]) 진행
answer.push(arr[i]) -> answer.push(arr[3]) -> answer.push(3)
answer = [1, 3]

i = 4 일 때
arr[4] === arr[4+1] -> arr[4] === arr[5] -> 0 === 1 -> false
false임으로 answer.push(arr[i]) 진행
answer.push(arr[i]) -> answer.push(arr[4]) -> answer.push(0)
answer = [1, 3, 0]

i = 5 일 때
arr[5] === arr[5+1] -> arr[5] === arr[6] -> 1 === 1 -> true
true임으로 continue진행

i = 6 일 때
arr[6] === arr[6+1] -> arr[6] === arr[7] -> 1 === undefined -> false
false임으로 answer.push(arr[i]) 진행
answer.push(arr[i]) -> answer.push(arr[6]) -> answer.push(1)
answer = [1, 3, 0, 1]

여기까지 프로그래머스 같은 숫자는 싫어 해결방안에 대해 설명해보았습니다.

728x90
반응형