728x90
우리가 필요한 작업은 아래와 같다.
1. X,Y가 공통되는 숫자들 구하기
2. 숫자들을 역순으로 정렬하기
3. 결과가 문자열로 나와야하며, 0000 처럼 나온 값들은 0으로 바꿔줘야함.
해당 값들을 숫자로 생각하면 시간초과에 걸리게 된다. 따라서 숫자를 숫자가 아닌 단순한 문자라고 생각을 하고 문제를 풀어보았다. 0~9까지의 숫자가 오게되니 해당 값을 idx로 둔 10개짜리 배열을 넣은다음 X,Y를 순회하면서 0~9 까지의 숫자들을 카운트 해주면된다.
이후, 두 배열들의 idx가 같은 값들을 비교하면서 최솟값만 넣어주면 된다.
이러면 1,2 번 과정을 includes나 indexOf등의 시간을 많이 잡아먹는 함수를 안 쓰고 해결할 수 있다.
3번도 굳이 문자를 쓰지 않고, 리스트에 0만 있는 경우나, 아예 겹치는 경우가 없는 부분만 따로 예외처리를 해주었다.
function solution(X, Y) {
const xCount = [ ... new Array(10) ].fill(0)
const yCount = [ ... new Array(10) ].fill(0)
for (const word of X) xCount[~~word] +=1
for (const word of Y) yCount[~~word] +=1
const lst = [ ... new Array(10) ].map((_,idx) => Math.min(xCount[idx],yCount[idx]) )
const ret = lst.reduce((a,c)=>a+c,0)===lst[0] ? "0" :lst.reduceRight((a,c,idx) => c ? a+idx.toString().repeat(c) : a ,"")
return lst.reduce((a,c) => a+c,0) ? ret : "-1"
}
728x90
'FrontEnd > 프로그래머스' 카테고리의 다른 글
[JS] 신고 결과 받기 (0) | 2023.04.17 |
---|---|
[JS] 성격 유형 검사하기 (0) | 2023.04.16 |
[JS] 삼총사 (0) | 2023.04.12 |
[JS] 콜라 문제 (0) | 2023.04.11 |
[JS] 옹알이 (2) (0) | 2023.04.10 |