Array().fill()
forEach()
Math.min()
, repeat()
'-1'
리턴'0'
으로 시작하면 '0'
리턴function solution(X, Y) {
const cntX = Array(10).fill(0);
const cntY = Array(10).fill(0);
[...X].forEach((n) => ++cntX[n]);
[...Y].forEach((n) => ++cntY[n]);
let result = '';
for (let i = 9; i >= 0; --i) {
if (cntX[i] === 0 || cntY[i] === 0) continue;
result += String(i).repeat(Math.min(cntX[i], cntY[i]));
}
if (!result) return '-1';
return result[0] === '0' ? '0' : result;
}
처음에 문자열 X 기준으로 반복하면서 안에서 includes()
로 비교하는 방법을 썼는데 이건 시간복잡도가 O(n^2)
이라 자꾸 시간 초과가 났다.
질문하기의 힌트를 참고해서 O(n)
으로 열심히 최적화했더니 통과했다.
덕분에 생각보다 오래 걸렸다.
시간복잡도를 고려하는 연습을 계속 해야겠다.