Bleeding edge

프로그래머스 튜플 본문

코딩테스트 공부

프로그래머스 튜플

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하는 방식으로 풀이를 하였다.

 

어떤식으로 문제를 해석할지에 대해 생각하게되는 문제중 하나였다.