[JS] 프로그래머스 숫자 짝꿍

DARTZ·2023년 5월 23일
0

알고리즘

목록 보기
113/135
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가지 방법으로 풀었습니다.

  1. X, Y를 정렬하고 indexOf와 lastIndexOf로 X, Y에서 숫자의 차이 만큼 answer 배열에 push 해주어서 풀었습니다.

  2. xObj, yObj라는 객체를 만들어 X, Y에서 문자가 나온만큼 횟수를 저장했습니다. 그리고 객체를 순환하면서 차이만큼 answer 배열에 push 해줬습니다.

하지만 위의 두가지 방법 모두 11번 ~ 16번 케이스에서 시간 초과가 발생했습니다. 각 문자별로 계속 배열을 순회해야하니 시간 초과가 발생했다고 생각합니다.

그래서 다른분의 코드를 참고 했고 문자 반복에는 repeat 함수를 사용하고 filter를 사용해서 length를 구하는 방법으로 알고리즘을 풀면 시간이 단축 된다는 것을 알았습니다.

JS repeat

profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

0개의 댓글