2019 카카오 겨울 인턴 2번 - 튜플

Posted by qwlake on May 5, 2020

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

문제 이해를 잘 못 하는 사람이 많은데, 나도 코딩테스트때 좀 헤맸었다.

1
2
3
4
5
6
{
    {1,2,3},
    {2,1},
    {1,2,4,3},
    {2}
}

두 번째 입력 예제를 보면 각 원소의 개수가 모두 다른 것을 볼 수 있다.

이를 원소의 개수대로 오름차순 정렬을 하면

1
2
3
4
5
6
{
    {2},
    {2,1},
    {1,2,3},
    {1,2,4,3}
}

위와 같이 나온다.

앞에서부터 새로 추가되는 원소를 구해 정답 배열을 구할 수 있다.

위 예제에서는

1) 2 =>2 추가

2) 2,1 => 1 추가

3) 1,2,3 => 3 추가

4) 1,2,4,3 => 4 추가

측, [2,1,3,4]가 답이다.

다음은 자바스크립트 코드이다.

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
32
33
34
35
36
37
38
39
40
41
function solution(s) {
    let answer = new Set();
    s = s.slice(1, s.length-1);
    let arr = [];
    let tmpArr = [];
    let tmp;
    let intSt;
    for (let i = 0; i < s.length; i++) {
        if (s[i] === '{') {
            intSt = i+1;
        } else if ((s[i] === ',' || s[i] === '}') && intSt !== -1) {
            tmp = parseInt(s.slice(intSt, i));
            tmpArr.push(tmp);
            intSt = i+1;
        }
        if (s[i] === '}') {
            arr.push(tmpArr);
            tmpArr = [];
            intSt = -1;
        }
    }

    arr.sort(function(a, b) {
        return a.length - b.length;
    });

    arr.forEach(e => {
        tmp = e.filter(x => !answer.has(x));
        answer.add(tmp[0]);
    });
    
    return Array.from(answer);
}

console.log(solution(
    "{ {2},{2,1},{2,1,3},{2,1,3,4} }", 
));

console.log(solution(
    "{ {20,111},{111} }",
));

https://github.com/qwlake/study-algorithm/blob/master/Javascript/2019 카카오 겨울 인턴/n02.js