본문 바로가기

프로그래머스

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

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

 

프로그래머스

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

programmers.co.kr


접근방법

배열 X, Y에서 겹치는 값을 temp 배열에 담아 역순으로 정렬한 뒤 문자열끼리 더하는 방법을 사용하였다.

 

1차제출

function solution(X, Y) {
    var answer = '';
    var temp = []
    for(yObj of Y){
        if(X.includes(yObj)){
            temp.push(yObj)
        }
    }

    if(temp.length > 0){
        temp = temp.sort((a,b) => b-a);
        for(tempObj of temp){
            answer += tempObj
        }
    }else{
        answer = -1;
    }
    
    return Math.floor(answer).toString();

}

결과 : 36.8

분석 : 중복된 숫자에 대한 처리를 하지 않아서 오답이었다.

접근방법을 바꿔서 X의 각 숫자의 개수를 세고, Y에서 각 숫자마다 체크하여 X에 존재하는 숫자일 경우 common에 값을 추가하고 마지막에 역순으로 정렬 후 처리하는 방식으로 수정하였다.

 

2차 제출

function solution(X, Y) {

    const mapX = new Map();

    // X의 각 숫자 개수 세기
    [...X].forEach((item) => {
        mapX.set(item, (mapX.get(item) || 0) + 1);
    });

    const common = [];
    [...Y].forEach((item) => {
        if(mapX.get(item) > 0){
            common.push(item);
            mapX.set(item, mapX.get(item) -1);
        }
    })
    
    common.sort((a, b) => b - a);
    if (common.length === 0) return "-1"; // 공통 숫자가 없을 때
    if (common[0] === "0") return "0";   // 모두 0일 때

    return common.join("");
}

결과 : 100점