min

프로그래머스 숫자 짝꿍 자바스크립트 본문

알고리즘

프로그래머스 숫자 짝꿍 자바스크립트

minprogramming 2023. 8. 24. 07:53

<문제>

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

<나의 풀이>

//X의 각원소를 높은 순 부터 낮은 순으로 배열을 만든다.
//Y의 각원소를 높은 순 부터 낮은 순으로 배열을 만든다.
//X와 Y중 길이가 작은 리스트 만큼 반복문을 돌면서 다음 과정을 수행한다.
//만약에 작은 길이의 배열의 원소가 긴 길이의 배열의 원소에 있다면 다음 과정을 수행한다.
//answer에 그 원소를 담는다.
//긴 길이의 배열의 원소를 지운다.
//answer를 반환한다.

function solution(X, Y) {
    let answer = '';
    let burket = {};
    
    X = X.split("").sort((a , b) => b - a)
    Y = Y.split("").sort((a , b) => b - a)

    let small = X.length > Y.length ? Y : X
    let large = X.length > Y.length ? X : Y
    
    for(let i = 0; i < large.length; i++) {
        if(burket[large[i]]) {
            burket[large[i]] += 1
        } else {
            burket[large[i]] = 1
        }
    }
    
    for(let j = 0; j < small.length; j++) {
        if(burket[small[j]]) {
            answer += small[j]
            burket[small[j]] -= 1
        }
    }
    
    if(answer === "") return "-1"
    
    if(answer.replaceAll("0" , "") === "") return "0"
    
    console.log(burket)
    
    
    return answer;
}

 

<다른 사람의 풀이>

 

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

    for (const char of X) {
        numObj[char] = (numObj[char] || 0) + 1;
    }

    for (const char of Y) {
        if (!numObj[char]) continue;
        result += char;
        numObj[char]--;
    }

    if (result === '') return '-1';
    if (+result === 0) return '0';
    return [...result]
        .map((num) => +num)
        .sort((a, b) => b - a)
        .join('');    
}

 

<참고 자료>

map

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Map

 

Map - JavaScript | MDN

Map 객체는 키-값 쌍과 키의 원래 삽입 순서를 기억합니다. 모든 값(객체 및 원시 값 모두)은 키 또는 값으로 사용될 수 있습니다.

developer.mozilla.org