우당탕탕 개발일기
[프로그래머스 / 자바스크립트] 같은 숫자는 싫어 본문
난이도가 중이 되자마자 잔뜩 길어진 문제.
차근차근 읽고 , 입출력 예까지 확인하고 뭘 말하는 문제인지까지는 이해 완료.
그리고 배열의 정렬에 손대지 말라, 즉, 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
'What I Learned > Algorithm' 카테고리의 다른 글
[프로그래머스 / 자바스크립트] K번째수 (0) | 2022.01.25 |
---|---|
[프로그래머스 / 자바스크립트] 문자열 내 마음대로 정렬하기 (0) | 2022.01.24 |
[프로그래머스 / 자바스크립트] 콜라츠 추측 (0) | 2022.01.24 |
[프로그래머스/ 자바스크립트] 자연수 뒤집어 배열로 만들기 (0) | 2022.01.24 |
[프로그래머스 / 자바스크립트] 수박수박수박수박수박수? (0) | 2022.01.24 |