https://school.programmers.co.kr/learn/courses/30/lessons/64065
나의 풀이
function solution(s) {
s = s.replace(/[{}]/g,"").split(",")
const checkRepetition = s.reduce((acc,cur) =>{
acc[cur] = (acc[cur]|| 0) + 1
return acc
},{})
return Object.entries(checkRepetition).sort(([,a], [,b]) => b - a).map((x) => +x[0])
}
문제를 잘 읽어야 한다.
s는 객체가 주어지는 게 아니라 문자열이 주어진다.
따라서 바로 replace를 해줘서 {}들을 제거해줬다.
replace부분은 아래처럼 해줘도 된다.
s = s.replace(/\{|\}/g,"").split(",")
처음에는 아 머야 set 사용해서 중복을 제거해줘야겠다. 했는데
result를 잘보면 숫자가 순서가 있다.
바로 중복 횟수가 많으면 앞쪽이고 중복이 적을 수록 뒤쪽으로 밀려난다.
따라서 각 중복되는 숫자가 몇개인지 파악하고 그걸 기반으로 순서를 정해서 배열로 return 하면된다.
위에서 replace해준것을 가지고 reduce를 통해서 각 숫자의 중복 횟수를 파악했다. return은 객체로 나온다.
그리고 그 객체를 entries를 통해 배열로 교체하고 sort로 중복이 많을수록 앞쪽으로 나오도록 했다.
마지막으로 map을 통해서 배열의 0번째 index를 추출했다.
실수하거나 제대로 알지 못한 부분
1. 맨날 배열아니면 문자열만 다루다 보니가 객체다루는 경험이 부족했다.
객체 공부를 다시 해야겠다.
https://html-jc.tistory.com/336
2. 중복 체크 reduce
reduce를 정말 많이 썼다고 생각했지만 객체로 표현하는 법이 바로 생각나지 않아서 이전에 어떻게 했지 찾아봤다.
acc[cur] = (acc[cur] || 0 ) + 1 이것을 꼭 기억하자
그리고 이 기회에 다시 reduce를 복습하자
https://html-jc.tistory.com/313
3. 정규표현식
아직 정규표현식을 다양하게 자주 사용하지 않아 익숙하지 않다
https://html-jc.tistory.com/303
5. sort
sort는 자주 사용해서 잘 안다고 생각했지만 이전에 보았던 표현인데 정말 오랜만이라 생각이 나지 않았다.
sort(([,a], [,b]) => b - a)
바로 이거다 .
다른 사람 풀이
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스 - JS ] level.2 [1차] 뉴스 클러스터링 (ing) (0) | 2022.11.02 |
---|---|
[프로그래머스] level.2 위장 (해시) (0) | 2022.10.25 |
[프로그래머스 - JS] level.2 n^2 배열 자르기 (0) | 2022.10.17 |
[프로그래머스] level.2 괄호 회전하기 {stack}(**) 다른사람 풀이 너무 좋음 (0) | 2022.10.13 |
[프로그래머스] level.2 H-index (1) | 2022.10.11 |