SPACE RUMI

Hi, I am rumi. Let's Splattack!

[IT] 프로덕트 개발/Coding Test - 코딩테스트

[LV1] 숫자 짝꿍

백루미 2022. 11. 24. 16:50
반응형

프로그래머스 LV1 > 연습문제 > 숫자 짝꿍

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

[문제해결]
1. 들어올수있는 X, Y의 자연수값이 매우 크니까 이중포문 돌려서 비교하면 시간초과 뜬다.
2. X와 Y의 들어있는 값이 몇개고 몇개 중복인지 x와 y 배열에 담는다.
3. x와 y의 값을 비교하면서 최소값을 추출한다. (만들수있는 짝꿍수 = 작은값)
4. 상황에 따라 리턴값 예외처리 해준다.

 

이중포문 돌리다가 시간초과 떠서 다른방법을 생각했다.

function solution(X, Y) {
    let answer = ''
    let double = []

    let x = Array(10).fill(0) // 0~9까지니까 
    let y = Array(10).fill(0) // 0~9까지니까 
    
    for(let i=0; i<X.length; i++){ // X의 배열의 인덱스가 값이고 갯수카운팅
        x[X[i]]++ 
    }
    for(let i=0; i<Y.length; i++){ // Y의 배열의 인덱스가 값이고 갯수카운팅
        y[Y[i]]++ 
    }
    for(let i=0; i<x.length; i++){
        if(x[i] !==0 && y[i] !==0){
        let twin = Math.min(x[i], y[i]);
            while(twin !== 0){
                double.push(i);   
                twin--
            }
        }
    }
 
    answer = double.length > 0 ? double.sort((a, b) => b - a).join("") : '-1';
    
      const sum = double.reduce((acc,res)=>{
        return acc = acc + res
    }, 0)
    
    if(double.length > 0 && sum == 0){  // 모든배열의 합이 0일때는 0리턴
        return '0';
    }
    
    return answer
    
}
반응형