차차로그
[JS] 2019 카카오 개발자 겨울 인턴십 > 튜플 본문
이번 문제는 어떻게 풀어야할지 흐름은 바로 파악했는데 그걸 구현하는게 너무 어려웠다..
결국 다른 사람 풀이를 참고함ㅠ
function solution(s) {
var answer = [];
//s = "{{1,2,3},{2,1},{1,2,4,3},{2}}"
s = s.slice(2,-2).split("},{") //[ '1,2,3', '2,1', '1,2,4,3', '2' ]
.sort((a,b)=>a.length-b.length) //[ '2', '2,1', '1,2,3', '1,2,4,3' ]
.map(val => val.split(",")
.map(x=>parseInt(x))); //[ [ 2 ], [ 2, 1 ], [ 1, 2, 3 ], [ 1, 2, 4, 3 ] ]
for(var val of s){
answer.push(...val.filter(x => !answer.includes(x)))
}
return answer;
}
주어진 s는 문자열이기 때문에 이것을 배열로 가공하는 과정을 가졌다.
먼저 slice를 사용해 맨 앞의 {{ 와 맨 뒤의 }}를 잘라낸 후 split으로 배열로 만들어줬다.
다음 각 인덱스의 길이에 맞게 순서를 정렬해줬다.
마지막에서 많이 헤맸는데 정렬까지 된 상태의 배열을 이차원 배열로 나눠주어야 했다.
현재는 '2', '2,1'의 문자열이 들어간 상태이므로 쉼표를 기준으로 split을 해준다. 그리고 스플릿된 배열 안의 값을 parseInt로 정수타입으로 변경해준다.
그러면 "{{1,2,3},{2,1},{1,2,4,3},{2}}"의 문자열이 [ [ '2' ], [ '2', '1' ], [ '1', '2', '3' ], [ '1', '2', '4', '3' ] ]의 이차원배열로 가공된다.
마지막 부분에서 만약에 아래의 코드 처럼 변경을 하게 된다면 0번 인덱스의 값만 불러와지고 일차원배열로 생성이 된다.
이 부분이 가장 어려웠다..
s = s.map(val => val.split(",")); //[ [ '2' ], [ '2', '1' ], [ '1', '2', '3' ], [ '1', '2', '4', '3' ] ]
s = s.map(x=>parseInt(x)); //[ 2, 2, 1, 1 ]
이제 이차원배열로 가공된 s 중에서 answer에 없는 값만 찾아 순서대로 answer에 넣어주면 된다.
현재 s의 val은 [ 2 ], [ 2, 1 ]의 배열이다.
그래서 전개연산자(...)를 이용해 값을 불러와야 2, 2, 1의 값을 불러올 수가 있다.
filter를 사용해 x가 answer배열에 포함되어 있지 않은 값만 answer배열에 push를 해주고 리턴해주면 된다.
+흐름은 알았지만 구현하는 데 어려웠던 문제.
정규식을 사용하면 되겠다는 생각을 처음에 해버려서인지 다른 방법을 찾는게 너무 어려웠다.
이차원배열의 값은 전개연산자를 이용해 편하게 찾을 수 있는 법을 알았다.
오늘도 새로운 것을 배웠다~

'코딩테스트' 카테고리의 다른 글
[JS] 연습문제 > 야근 지수 (0) | 2022.09.22 |
---|---|
[JS] 2018 KAKAO BLIND RECRUITMENT[1차] > 뉴스 클러스터링 (0) | 2022.09.22 |
[JS] 스택/큐 > 프린터 (0) | 2022.09.21 |
[JS] 스택/큐 > 기능개발 (0) | 2022.09.21 |
[JS] 해시 > 위장 (0) | 2022.09.21 |