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

hoonsbory·2022년 12월 23일
0

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131128

이 문제는 1레벨 문제이지만 무려 1시간10분이 걸려 풀었다.

완전탐색 방식으로 10분만에 풀었지만, 시간초과가 나왔다..

조금씩 수정하며 시도했지만 똑같았고, 아예 방법을 바꿔 풀었다.

이 방법이 어떤 알고리즘인지는 알지는 못하겠으나, 설명을 해보자면,

하나씩 완전 탐색하지 않고 0~9까지 몇 개의 숫자가 중복되는지 체크 후, 두 배열을 비교하여 더 적은 수만큼 정답 배열에 더해줬다.

이렇게 하면 최소 On2의 시간복잡도에서 최악 On2(반복문안에서 중복된 숫자만큼만 반복하기때문)의 시간복잡도로 바뀌기 때문에 시간초과가 나지 않는다.

코드는 아래와 같다.

const solution = (X,Y)=> {
    const arr = Array(10).fill(0);
    const arr2 = Array(10).fill(0);
    [...X].forEach(i=>arr[i]++);
    [...Y].forEach(i=>arr2[i]++);
    let answer = []
    arr.forEach((num,idx)=>{
        const result = Math.min(num,arr2[idx])
        Array(result).fill(undefined).forEach(i=>answer.push(idx))
    })
    answer = answer.sort((a,b)=>b-a).join('')
    return answer[0] == 0 ? '0' : answer || '-1'
}

0개의 댓글