πŸ˜Ίν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - LV.1 숫자 짝ꢁ[JS]

laonΒ·2024λ…„ 6μ›” 13일
post-thumbnail

문제 μ„€λͺ…

두 μ •μˆ˜ 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"

풀이

μ²˜μŒμ—λŠ” 2쀑 λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•˜μ—¬ 두 λ¬Έμžμ—΄μ—μ„œ κ³΅ν†΅μœΌλ‘œ λ‚˜νƒ€λ‚˜λŠ” 숫자λ₯Ό 찾으렀 ν–ˆλ‹€. ν•˜μ§€λ§Œ 이 방법은 μ‹œκ°„ λ³΅μž‘λ„κ°€ O(n^2)둜 μ‹œκ°„ μ΄ˆκ³Όκ°€ λ°œμƒν–ˆλ‹€.😿

κ·Έλž˜μ„œ λ°˜λ³΅λ¬Έμ„ ν•œ 번 μ‚¬μš©ν•˜κ³ , filter ν•¨μˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ³€κ²½ν–ˆλ‹€.

function solution(X, Y) {
    let answer = "";
    // μͺΌκ°œκΈ°
    X = X.split("");
    Y = Y.split("");
    // 숫자 9~0을 비ꡐ (0~9 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ λ°˜λ³΅λ¬Έμ„ 돌면 λ§ˆμ§€λ§‰μ— 정렬을 ν•΄μ€˜μ•Όν•΄μ„œ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ 비ꡐ)
    for(let i = 9; i >= 0; i--){
        // x와 yμ—μ„œ i값이 λͺ‡κ°œ ν¬ν•¨λ˜μ–΄μžˆλŠ”μ§€ μΆ”μΆœ 
        const x = X.filter(x => Number(x) === i).length;
        const y = Y.filter(y => Number(y) === i).length;
        // answer에 x와 y쀑 더 μž‘μ€ 수만큼 λ°˜λ³΅ν•˜μ—¬ iκ°’ λŒ€μž…
        answer += String(i).repeat(Math.min(x, y));
    }
	// μ˜ˆμ™Έμ²˜λ¦¬
    if (answer.length === 0) return "-1";
    if (answer.charAt(0) === "0") return "0";

    return answer;
}

λŠλ‚€μ πŸ˜Ί

1레벨치고 생각보닀 μ–΄λ €μ› λ˜ λ¬Έμ œμ˜€λ‹€. 자쑴감 올리렀고 ν‘Ό 문제인데 더 λ–¨μ–΄μ§„ κ±° κ°™λ‹€...γ…Ž

profile
laonlaon

0개의 λŒ“κΈ€