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

devmin24·2021년 8월 6일
0

⏳ 도전! 알고리즘

목록 보기
26/32
post-thumbnail

문제 링크

문제

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,

arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

arranswer
[1,1,3,3,0,1,1][1,3,0,1]
[4,4,4,3,3][4,3]

풀이

배열의 요소들을 순회하면서 해당 요소 [i]와 다음 요소 [i+1]가 같다면 둘 중 하나만 넣어준다.
다르게 접근하면 해당 요소 [i]와 다음 요소 [i+1]가 다르다면 해당 요소만 넣어주면 된다.
헷갈린다면 하나씩 그림을 그려 대입해보면 쉽게 이해된다.

arr[1,1,3,3,0,1,1]을 예로 들어보자. 두 개의 요소가 다를 경우에만 첫번째 요소를 남긴다.
1. [1,1] (index 0,1) => 같다, continue
2. [1,3] (index 1,2) => 다르다, 1 push
3. [3,3] (index 2,3) => 같다, continue
4. [3,0] (index 3,4) => 다르다, 3 push
5. [0,1] (index 4,5) => 다르다, 0 push
6. [1,1] (index 5,6) => 같다, continue
7. [1,undefined] (index 6,7) => 다르다, 1 push


push되는 요소들을 나열하면 [1,3,0,1]이 된다.

function solution(arr)
{
    var answer = [];
    
    for(let i=0; i<arr.length; i++) {
        if (arr[i] !== arr[i+1]) { // 다를 때만
            answer.push(arr[i]);
        }
    return answer;
}

순서 7번을 보면 i가 마지막 요소인데 코드에서 arr[i+1]을 어떻게 처리할까? 하는 궁금증이 생길 수 있다.
console.log(arr[7])을 실행해보면 undefined가 출력되는 것을 볼 수 있다.


Takeaway

문제가 헷갈려서 어렵다고 느껴질 수 있지만, 하나씩 대입해 그림을 그리거나 console.log로 출력하며 확인해보면 쉽게 해결할 수 있다!

profile
꾸준함, 열정 한 가득 챙겨 끝없는 목표를 향해 달려가는 개발자👩‍💻

0개의 댓글