안녕하세요
프로그래머스 JS [숫자 짝꿍] 본문
숫자 짝꿍 문제보기
문제 요약
X, Y에서 겹치는 숫자 찾기
찾은 숫자들로 가장 큰 정수 만들기
문제 조건
1. X, Y에서 공통으로 나타나는 정수 찾기 (0~9 사이)
2. 가장 큰 정수를 만들 수 있는 경우가 두 수의 짝꿍
3. 짝꿍이 없으면 짝꿍은 -1
4. 0으로만 구성되어 있다면 짝꿍은 0
문제 풀이
1. 0~9를 카운트할 Object 생성
function solution(X, Y) {
let 공통정수 = "";
const xCount = {};
const yCount = {};
for (let i = 0; i < 10; i++) {
[xCount[i], yCount[i]] = [0, 0];
}
{
'0': 0,
'1': 0,
'2': 0,
'3': 0,
'4': 0,
'5': 0,
'6': 0,
'7': 0,
'8': 0,
'9': 0
}
2. 숫자 개수 카운트
for (let i = 0; i < X.length; i++) {
xCount[X[i]] += 1;
}
for (let i = 0; i < Y.length; i++) {
yCount[Y[i]] += 1;
}
{
'0': 2,
'1': 0,
'2': 0,
'3': 0,
'4': 0,
'5': 0,
'6': 0,
'7': 0,
'8': 0,
'9': 2
}
3. 같은 정수 추가하기
xCount와 yCount 중에서 작은 수 만큼 i 를 반복시키면 된다.
ex)
xCount { "1" : 2 }
yCount { "1" : 1 }
둘 중에 작은 수 = 1
repeat로 i("1")를 둘 중에 작은 수(1) 만큼 반복
for (let i = 0; i < 10; i++) {
if (xCount[i] > 0 && yCount[i] > 0) {
공통정수 += i.toString().repeat(Math.min(xCount[i], yCount[i]));
}
}
solution("0909", "9090");
// 0099
4. 조건에 따라 결과 반환하기
// 공통되는 정수 없으면 -1 반환
if (공통정수 === "") return "-1";
// 0뿐이면 0 반환
if (공통정수 * 1 === 0) return "0";
// 4. 만들 수 있는 가장 큰 정수 반환 (내림차순 정렬하여 만들 수 있다.)
return 공통정수
.split("")
.sort((a, b) => b - a)
.join("");
}
function solution(X, Y) {
let 공통정수 = "";
const xCount = {};
const yCount = {};
for (let i = 0; i < 10; i++) [xCount[i], yCount[i]] = [0, 0];
for (let i = 0; i < X.length; i++) xCount[X[i]] += 1;
for (let i = 0; i < Y.length; i++) yCount[Y[i]] += 1;
for (let i = 0; i < 10; i++) {
if (xCount[i] > 0 && yCount[i] > 0) {
공통정수 += i.toString().repeat(Math.min(xCount[i], yCount[i]));
}
}
if (공통정수 === "") return "-1";
if (공통정수 * 1 === 0) return "0";
return 공통정수.split("").sort((a, b) => b - a).join("");
}
'프로그래머스 > Lv.1' 카테고리의 다른 글
프로그래머스 JS [문자열 나누기] (2) | 2023.01.31 |
---|---|
프로그래머스 JS [옹알이2] (0) | 2023.01.30 |
프로그래머스 JS [명예의 전당(1)] (0) | 2023.01.29 |
프로그래머스 JS [기사단원의 무기] (0) | 2023.01.20 |
프로그래머스 JS [과일 장수] (0) | 2023.01.19 |