[kakao] tuple

방금 막 끝난 kakao 인턴 코딩테스트 2번 문제에 대한 나의 풀이.

정확한 문제명이 기억나지 않는다…

접근법: 입력 받은 문자열에서 숫자만을 추출한 배열을 만들고 배열에 있는 중복되는 숫자의 갯수를 세어서 갯수가 가장 많은 수 부터 정렬한 배열을 반환한다.

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
function solution(s) {
// 정규 표현식을 이용하여 ,로 구분된 숫자로 이루어진 문자열을 반환. 20,111,111
let numberExt = s.replace(/[^0-9,]/g,"");

// 숫자로 이루어진 문자열을 ,로 구분하여 배열로 변환. [ '20', '111', '111' ]
let num = numberExt.split(',');

// num 배열의 원소가 하나인 경우 바로 반환. ex) "{{123}}" 이 입력 됐을 경우 [123] 반환.
if(num.length === 1) return [+num[0]];

// 객체 형태로 각 숫자의 갯수를 셈. { '20': 1, '111': 2 }
let hashed = {};
num.forEach(n => {
hashed[n] = hashed[n] ? hashed[n] + 1 : 1
});

let hashedArr = [];
// hashed 객체를 for...in문으로 순환하면서 각 숫자를 따로 객체 형태로 만들어 배열의 원소로 push.
// [ { key: '20', count: 1 }, { key: '111', count: 2 } ]
for(let key in hashed) {
hashedArr.push({key, count: hashed[key]});
}

// sort 메소드를 활용하여 count 값으로 내림차순 정렬.
// map 메소드를 활용하여 key 값만으로 이루어진 새로운 배열을 반환.
return hashedArr.sort((a, b) => b.count - a.count).map(({key})=>+key);
}

console.log(solution("{{20,111},{111}}")); // [ 111, 20 ]
Share