자바스크립트 코딩테스트

프로그래머스 Level 1 - 숫자 짝꿍 (Javascript)

준벨롭 2023. 11. 26. 21:16

문제

답안

function solution(X, Y) {
    var answer = '';
    let cnt1 = 0;
    let cnt2 = 0;
    
    // X,Y에 들어있는 숫자의 갯수를 cnt1, cnt2에 담아 적은 값을 answer에 넣어준다.
    for(let i = 0; i <= 9; i++){
    cnt1 = X.split('').filter(a => a==i).length;
    cnt2 = Y.split('').filter(a => a==i).length;

    answer += i.toString().repeat(Math.min(cnt1,cnt2));
    }
    
    // answer가 공백이라면 -1 출력, 0을 다 제거했을때 공백이라면 0 출력
    // 둘다 아니라면 배열을 내림차순으로 정렬해준다.
    if(answer == ""){
        return "-1";
    } else if(answer.replaceAll(0, "") === ""){
        return "0";
    } else {
        return answer.split('').reverse().join('');
    }
}

배우고 싶은 답안

function solution(X, Y) {
    let result = '';
    const numObj = {};

    // X의 char가 numObj에 있을경우 없으면 0에서 +1, 있으면 해당값에 +1
    for (const char of X) {
        numObj[char] = (numObj[char] || 0) + 1;
    }
    // Y의 char가 numObj에 없을경우 건너뛰고, 있을경우 result에 char값을 넣어주고, numObj 해당값에서 -1
    for (const char of Y) {
        if (!numObj[char]) continue;
        result += char;
        numObj[char]--;
    }
    // result 공백이면 -1 출력
    // result가 0이면 0 출력
    // return을 숫자열로 변환하고 내림차순으로 변환한다.
    if (result === '') return '-1';
    if (+result === 0) return '0';
    return [...result]
        .map((num) => +num)
        .sort((a, b) => b - a)
        .join('');    
}

후기

numObj[char] = (numObj[char] || 0) +1; 

해당 key의 value 유무를 위와 같은 방법으로 확인하는 방법을 연습하자

728x90