Notice
Recent Posts
Recent Comments
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Today
Total
관리 메뉴

차차로그

[JS] 2019 카카오 개발자 겨울 인턴십 > 튜플 본문

코딩테스트

[JS] 2019 카카오 개발자 겨울 인턴십 > 튜플

차차한 2022. 9. 22. 08:50

이번 문제는 어떻게 풀어야할지 흐름은 바로 파악했는데 그걸 구현하는게 너무 어려웠다..

결국 다른 사람 풀이를 참고함ㅠ

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
Comments