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

Miro·2022년 10월 19일
0
post-thumbnail

프로그래머스 Lv.1 숫자 짝꿍

문제, 제한사항

입출력

실패한 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function solution(X, Y) {
    let answer = "";
    let x = X.split("").sort().reverse();
    let y = Y.split("").sort().reverse();
    
    for(let i = 0; i < x.length; i++) {
        for(let j = 0; j < y.length; j++) {
            if(x[i] === y[j]) {
                answer += y[j];
                y.splice(j, 1);
                break;
            }
        }
    }
    
    if(answer.length === 0return "-1";
    else if(answer[0=== "0"return "0";
    
    return answer;
}
cs

처음 작성하였던 실패한 코드이다.
정확히는 작동은 하지만 이중 for문을 사용해서 테스트케이스 11~15번이 시간 초과가 발생했다.
좀 찾아보니 splice의 사용도 한몫 한 것같다.
결국 다른 방법을 찾아야 했다.

나의 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function solution(X, Y) {
    let answer = "";
    let x = [0000000000];
    let y = [0000000000];
    
    for(let i = 0; i < X.length; i++) {
        x[X[i]]++;
    }
    for(let i = 0; i < Y.length; i++) {
        y[Y[i]]++;
    }
    
    for(let i = 9; i >= 0; i--) {
        if(x[i] === 0 || y[i] === 0) {
            continue;
        } else {
            for(let j = 0; j < Math.min(x[i], y[i]); j++) {
                answer += i;
            }
        }
    }
    
    if(answer.length === 0return "-1";
    else if(answer[0=== "0"return "0";
    
    return answer;
}
cs

먼저 인덱스 0부터 9까지 0으로 전부 가득 차있는 xy라는 배열을 선언해준다.

반복문을 2개 작성하고 i를 0부터 X, Y의 길이만큼 반복한다.
X[i]의 숫자를 배열 x의 인덱스라고 생각하고 1씩 증가 시켜준다.

그러면 예를 들어서 X가 "1234"이고 Y가 "1233"이면
x = [0, 1, 1, 1, 1, 0, 0, 0, 0, 0]
y = [0, 1, 1, 2, 0, 0, 0, 0, 0, 0] 가 된다.

반복문을 i가 9부터 0까지 감소하게 만들어준다.
만약 x[i]가 0이거나 y[i]가 0이라면 continue하고,
그렇지 않다면 x[i]y[i]중 최소값을 찾아서 그 숫자 만큼 answeri를 더해준다.

만약 answer의 길이가 0이면(빈 문자열이면) "-1"을 return하고,
answer[0]가 "0"으로 시작하면 "0"을 return 해준다.

조건에 걸리는게 없다면 answer을 return 해준다.

profile
프론트엔드 개발자(진)

0개의 댓글