자바스크립트 코딩테스트
프로그래머스 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