반응형
프로그래머스 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
}
반응형
'[IT] 프로덕트 개발 > Coding Test - 코딩테스트' 카테고리의 다른 글
[LV0] 다음에 올 숫자 (0) | 2022.11.25 |
---|---|
[LV1] 소수 찾기 / Math.sqrt() 제곱근 활용 (0) | 2022.11.24 |
[LV0] 숨어있는 숫자의 덧셈(2) (0) | 2022.11.23 |
[LV1] 체육복 (0) | 2022.11.23 |
[LV1] 문자열 내 마음대로 정렬하기 (0) | 2022.11.21 |