
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)으로 열심히 최적화했더니 통과했다.
덕분에 생각보다 오래 걸렸다.
시간복잡도를 고려하는 연습을 계속 해야겠다.