코딩테스트 공부
프로그래머스 튜플
codevil
2022. 4. 5. 17:35
https://programmers.co.kr/learn/courses/30/lessons/64065
코딩테스트 연습 - 튜플
"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]
programmers.co.kr
개인적으로는, 이 문제가 무슨문제인가.. 하고 멘붕에 빠졌었는데, 어떤 분의 한마디가 문제아이디어를 잡는데 도움이 됬다.
숫자의 갯수로 정렬.
이 문제에서는 a1 a2 a3... an는 각 a1 : n, a2 :n-1 ... an : 1번만큼 출연을 하니 이에 맞게 sort를 하면된다.
function solution(s) {
var answer = [];
const regex = /[^0-9,]/g
let map = new Map()
s = s.replace(regex, '').split(',')
for(let i =0; i<s.length; i++){
if(!map.get(s[i])){
map.set(s[i], 1)
}else{
map.set(s[i], map.get(s[i])+1)}
}
map = Array.from(map).sort((a,b)=> b[1]-a[1])
for(i of map){
answer.push(Number(i[0]))
}
return answer;
}
1. regex로 {}를 없애고,
2. split으로 숫자를 array로 찢고,
3. 이를 map에 넣어서 1개씩 카운트를 한 뒤에
4. map을 Array로 바꾸고
5. Array를 map에 저장된 등장 횟수로 sort로 순서를 맨긴 뒤
6. answer에 push하는 방식으로 풀이를 하였다.
어떤식으로 문제를 해석할지에 대해 생각하게되는 문제중 하나였다.