우당탕탕 개발일기

[프로그래머스 / 자바스크립트] 같은 숫자는 싫어 본문

What I Learned/Algorithm

[프로그래머스 / 자바스크립트] 같은 숫자는 싫어

rilee 2022. 1. 24. 15:58
728x90

난이도가 중이 되자마자 잔뜩 길어진 문제. 

차근차근 읽고 , 입출력 예까지 확인하고 뭘 말하는 문제인지까지는 이해 완료.

그리고 배열의 정렬에 손대지 말라, 즉, sort 등의 사용 금지가 문제의 포인트인듯 하다. 췌,,

 

그럼 배열의 정렬엔 손을 대지 않고, 배열 내 중복 요소들을 찾아서 삭제하여 리턴하는 방법이라는건가??

 

 

(💥엉망코드)

function solution(arr){
    var answer = [];
    
    var set = new Set(arr);
    var new_arr = [...set]
    
    return new_arr;
}

배열의 중복, 배열의 삭제 등등 많은 키워드를 찾아보았더니 뭔가 비슷해보이는 걸 하나 발견!

중복없는 데이터 표현이 가능한 set 객체를 이용여 배열의 중복을 없애고, [...set]로 set 객체를 다시 배열로 변환했다.

 

결과는,

ㅎ,,? 이게,, 통과가 되는게 있네,,? 아무래도 set의 중복제거 효과는 확실해보이는 듯 하다^^!

하지만 테스트 1처럼 같은 숫자가 앞에서도 연속+뒤에서도 연속인 경우는 뒤의 숫자들까지 다 지워버려서 실패.

 

방법을 완전히 바꿔야하는걸까싶어서 이것저것 생각해보다가,

for문으로 배열 길이만큼 돌리면서 [i] = [i+1]이면 [i+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;
}

근데 그게 꽤나 쏠쏠한 발견이었다.

콜라츠에서 뒷통수가 얼얼해지고 최대한 단순하게 접근해보려 for문으로 배열을 반복하게 돌리고,

삭제를 하는 대신, if문으로 겹치지 않는 배열 요소들만 빈 배열인 answer로 집어넣었더니 통과.

대신 효율성이 조금  떨어진대서 찜찜해있었는데, 다른 분들의 코드 역시 비슷한 효율성이 나오는 걸 확인하고

다시 기분이 좋아지고 있다^^!

 

 

 

📍 문제 출처

: https://programmers.co.kr/learn/courses/30/lessons/12906

 

코딩테스트 연습 - 같은 숫자는 싫어

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

programmers.co.kr

 

728x90