자바스크립트

[JavaScript] 숫자 짝꿍 - (프로그래머스)

슈크림 붕어빵 2023. 10. 31. 17:38

X와 Y가 굉장히 큰 수일 수 있어 X와 Y를 모두 검사하며 for문을 두번 돌리면서 진행하면 시간초과로 틀린다. O(n)으로 풀어야한다.

function solution(X, Y) {
    var answer = '';
    var numbers=[];
    X=X.split("");
    X.sort(function(a,b){
            return a-b;
    });
    Y=Y.split("");
    Y.sort(function(a,b){
            return a-b;
    });
    var j =0;
    var i =0;
    while(i<X.length&&j<Y.length){       
        if(Y[j]==X[i]){
            numbers.push(Y[j]);         
            i++;
            j++;
        }
        else if(X[i]>Y[j]){
            j++
        }
        else if(Y[j]>X[i]){
            i++;
        }      
    }
    
    
    if (numbers.length==0){
        return "-1";
    }
    else{
        numbers.sort(function(a,b){
            return b-a;
        });
        numbers=numbers.join("");
        if (numbers[0]==0)
            numbers = "0";   
    }
    return numbers;
}

1. 먼저 X와 Y를 오름차순으로 정렬해준다.

2. i는 X를 도는 변수, j는 Y를 도는 변수로 설정했다.

3. X[i]와 Y[j]가 같으면 같은 숫자를 모으는 numbers에 저장한다.

4. 더 작은 숫자를 돌고있는 배열의 인덱스를 같을 때까지 올린다.

5. 하나라도 끝까지 순회했으면 마친다.

6. 비어있으면 -1을 반환, 아니라면 numbers를 내림차순하고 이어붙인다. 0일 때 예외처리