function solution(X, Y) {
var answer = '';
const xArr = [...X];
const yArr = [...Y];
for (let i = 0; i < 10; i++) {
const xLen = xArr.filter((v) => String(i) === v).length;
const yLen = yArr.filter((v) => String(i) === v).length;
answer += String(i).repeat(Math.min(xLen, yLen));
};
if (answer === '') return '-1';
if (Number(answer) === 0) return '0';
return [...answer].sort((x,y) => y - x).join("");
}
위 코드를 참고하기 전에 먼저 제 마음대로 2가지 방법으로 풀었습니다.
X, Y를 정렬하고 indexOf와 lastIndexOf로 X, Y에서 숫자의 차이 만큼 answer 배열에 push 해주어서 풀었습니다.
xObj, yObj라는 객체를 만들어 X, Y에서 문자가 나온만큼 횟수를 저장했습니다. 그리고 객체를 순환하면서 차이만큼 answer 배열에 push 해줬습니다.
하지만 위의 두가지 방법 모두 11번 ~ 16번 케이스에서 시간 초과가 발생했습니다. 각 문자별로 계속 배열을 순회해야하니 시간 초과가 발생했다고 생각합니다.
그래서 다른분의 코드를 참고 했고 문자 반복에는 repeat 함수를 사용하고 filter를 사용해서 length를 구하는 방법으로 알고리즘을 풀면 시간이 단축 된다는 것을 알았습니다.