Lv.1 - 숫자 짝꿍_01.12

송철진·2023년 1월 12일
0

문제 설명

두 정수 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의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.

입출력 예

XYresult
"100""2345""-1"
"100""203045""0"
"100""123450""10"
"12321""42531""321"
"5525""1255""552"

나의 코드

function solution(X="12321", Y="42531") {
    X = X.split("")
    Y = Y.split("")
    const objX = {}
    const objY = {}
    for(let el of X){
        objX[el] === undefined ? objX[el] = 1 : objX[el] += 1
    }
    for(let el of Y){
        objY[el] === undefined ? objY[el] = 1 : objY[el] += 1
    }
    let result = ""
    for(let [kX,vX] of Object.entries(objX)){
        for(let [kY,vY] of Object.entries(objY)){
            if(kX === kY) result = kX.repeat(Math.min(vX,vY)) + result
        }
    }
    return result !== "" ? Number(result) === 0 ? "0" : result : "-1"
}

풀이

  1. X, Y를 split()한 값을 X,Y에 재할당하고
	X = X.split("")
    Y = Y.split("")
  1. objX, objY에 X,Y를 순회하여 각 요소는 , 중복 개수는 으로 삽입한다
    const objX = {}
    const objY = {}
    for(let el of X){
        objX[el] === undefined ? objX[el] = 1 : objX[el] += 1
    }
    for(let el of Y){
        objY[el] === undefined ? objY[el] = 1 : objY[el] += 1
    }
  1. objX, objY를 객체 순회하여 동일한 가 존재하면 을 비교해서 작은 수만큼 빈문자열 result에 추가한다.
    이때, 가 오름차순으로 정렬되어 있으므로 result가 최대값이 되려면 내림차순으로 정렬되어야 한다. result += a가 아니라 result = a + result여야 함!
	let result = ""
    for(let [kX,vX] of Object.entries(objX)){
        for(let [kY,vY] of Object.entries(objY)){
            if(kX === kY) result = kX.repeat(Math.min(vX,vY)) + result
        }
    }
  1. result가 "00"일수도 있으므로 Number(result)가 0이면 "0" 반환,
    ""이면 "-1" 반환, 둘다 아니면 result를 반환한다
    return result !== "" ? Number(result) === 0 ? "0" : result : "-1"
profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글