두 정수
X
,Y
의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다(단, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용합니다).X
,Y
의 짝꿍이 존재하지 않으면, 짝꿍은 -1입니다.X
,Y
의 짝꿍이 0으로만 구성되어 있다면, 짝꿍은 0입니다.
예를 들어,X
= 3403이고Y
= 13203이라면,X
와Y
의 짝꿍은X
와Y
에서 공통으로 나타나는 3, 0, 3으로 만들 수 있는 가장 큰 정수인 330입니다. 다른 예시로X
= 5525이고Y
= 1255이면X
와Y
의 짝꿍은 X와 Y에서 공통으로 나타나는 2, 5, 5로 만들 수 있는 가장 큰 정수인 552입니다(X
에는 5가 3개,Y
에는 5가 2개 나타나므로 남는 5 한 개는 짝 지을 수 없습니다.)
두 정수X
,Y
가 주어졌을 때,X
,Y
의 짝꿍을 return하는 solution 함수를 완성해주세요
- 3 ≤
X
,Y
의 길이(자릿수) ≤ 3,000,000입니다.X
,Y
는 0으로 시작하지 않습니다.X
,Y
의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.
X Y result "100" "2345" "-1" "100" "203045" "0" "100" "123450" "10" "12321" "42531" "321" "5525" "1255" "552"
function solution(X, Y) {
var answer = '';
const cntX = [0,0,0,0,0,0,0,0,0,0]
const cntY = [0,0,0,0,0,0,0,0,0,0]
/* 각 숫자가 몇번 나왔는지 카운트 */
for(i of X){
cntX[+i]++;
}
for(i of Y){
cntY[+i]++;
}
/* 큰 수를 만들어야하니 9부터 순회
x,y가 0보다 크다면 둘 중 작은 숫자만큼 반복하며 답에 더하기
*/
for(let i=9; i>=0; i--){
const x = cntX[i];
const y = cntY[i];
if(x > 0 && y > 0){
for(let c=0; c< ((x>y)?y:x); c++){
answer += i
}
}
}
if(answer === "") return "-1";
return answer[0] === "0" ? "0" : answer;
}
숫자는 0~9로 이루어져 있으므로 각 숫자가 몇번 나왔는지 카운트할 배열을 각각 만들어준다.
X
와 Y
를 순회하면서 배열에 카운트 해주고
큰 수를 만들어야하니 9부터 카운트 되었는지 아닌지를 검사한다.
만약 카운트 되었다면 둘 중 카운트 횟수가 적은 숫자만큼 반복해서
정답에 더해준다.
정답이 비어있다면 짝꿍을 만들 수 없는 것 이므로 "-1"을 리턴
정답의 첫 글자가 "0" 이라면 "00", "000" 이런 숫자 이므로 "0"을 리턴
그 외에는 짝꿍을 만든 것이니 그대로 리턴해준다.