본문 바로가기
알고리즘 문제/프로그래머스_Lv1 도장깨기

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

by 스코필 2025. 1. 7.

문제 링크

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명

두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 <= k <= 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다. 

X, Y의 짝꿍이 존재하지 않으면, 짝꿍은 -1입니다. X, Y의 짝꿍이 0으로만 구성되어 있다면, 짝꿍은 0입니다.

두 정수 X, Y가 주어졌을 때, X, Y의 짝꿍을 리턴하는 함수를 완성하세요.

제한 사항

  • 3 <= X, Y의 길이(자릿수) <= 3,000,000 입니다.
  • X, Y는 0으로 시작하지 않습니다.
  • X, Y의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.

 

풀이

  1. X, Y의 길이가 300만이기 때문에, X의 숫자가 Y에 포함되어 있는지 확인하는 방법은 시간이 너무 오래 소요된다. 따라서, k의 범위가 0부터 9까지 이므로 filter함수를 이용하여 0부터 9까지의 개수(count)를 구해 문자열에 추가시켰다.
  2. 가장 큰 정수를 리턴해야하기 때문에 9부터 0까지 반복문을 돌게 되면 내림차순 정렬을 따로 할 필요가 없어진다.

 

✅ Code - 성공

function solution(X, Y) {    
    let answer = '';
    
    function counting_num(num) {
        const num_x = X.split('').filter(val => val === num).length;
        const num_y = Y.split('').filter(val => val === num).length;
        return Math.min(num_x, num_y);
    }
    
    for (let i = 9; i >= 0; i--) {
        const min_cnt = counting_num(String(i));
        if (min_cnt > 0) answer += String(i).repeat(min_cnt);
    }
    
    if (answer[0] === '0') return '0'
    return answer.length >= 1 ? answer : '-1'    
}