๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[Algorithm] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv.1 : ์ˆซ์ž ์ง๊ฟ

by ์ฝ”๋”ฉ๊ณต์ฑ… 2022. 12. 7.
๋ฐ˜์‘ํ˜•

์ˆซ์ž ์ง๊ฟ

๋‘ ์ •์ˆ˜ 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"

๋ฌธ์ œ ํ’€์ด

for๋ฌธ์„ ํ†ตํ•ด ํ•ด๋‹น ์ˆซ์ž๊ฐ€ ์–ผ๋งˆ๋‚˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์„œ ๋” ๋‚ฎ์€๋งŒํผ ์ •๋‹ต ๋ฌธ์ž์—ด์— ๋”ํ•œ๋‹ค. return์—์„œ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด ๋ฐ˜ํ™˜ํ•˜๋ฉด ์ตœ๋Œ“๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

function solution(X, Y) {
    let answer = ''
    X = X.split("")
    Y = Y.split("")
    
    for(let i = 0 ; i < 10 ; i ++) {
        const curX = X.filter(a => Number(a) === i).length
        const curY = Y.filter(a => Number(a) === i).length
        answer+=String(i).repeat(Math.min(curX, curY))
    }
    if(answer === '') return "-1"
    if(Number(answer) === 0) return "0"
    
    return answer.split("").sort((a,b) => Number(b)-Number(a)).join("")
}

๋‹ค๋ฅธ ํ’€์ด ๋ฐฉ์‹

function solution(X, Y) {
    let result = '';
    const numObj = {};

    for (const char of X) {
        numObj[char] = (numObj[char] || 0) + 1;
    }

    for (const char of Y) {
        if (!numObj[char]) continue;
        result += char;
        numObj[char]--;
    }

    if (result === '') return '-1';
    if (+result === 0) return '0';
    return [...result]
        .map((num) => +num)
        .sort((a, b) => b - a)
        .join('');    
}


// want
// X, Y์—์„œ ์ง์œผ๋กœ ์ˆซ์ž๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ผ

// solving
// 1. X๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ์ˆซ์ž์˜ ๊ฐœ์ˆ˜ ์„ธ์–ด ๊ฐ์ฒด or ๋ฐฐ์—ด์— ์ €์žฅ 
// 2. Y๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ๋ฌธ์ž๊ฐ€ 1๋ฒˆ์—์„œ ์ €์žฅํ•œ ๊ฐ์ฒด์— ์ €์žฅํ•œ ๊ฐ’์ด 1์ด์ƒ์ธ ๊ฒฝ์šฐ, ๊ทธ ๊ฐ’์„ -1ํ•˜๊ณ  result์— ์ถ”๊ฐ€
// 3. 2๋ฒˆ์—์„œ ๋งŒ๋“ค์–ด์ง„ ๋ฌธ์ž์—ด์ด ๋นˆ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด -1 ๋ฐ˜ํ™˜
// 5. 2๋ฒˆ์—์„œ ๋งŒ๋“ค์–ด์ง„ ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ–ˆ์„ ๋•Œ 0์ด๋ผ๋ฉด 0 ๋ฐ˜ํ™˜
// 6. ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•œ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€


Reference Book

JavaScript
HTML
CSS
๊ด‘๊ณ  ์ค€๋น„์ค‘์ž…๋‹ˆ๋‹ค.