๐Ÿ˜บํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - LV.1 ๋‹ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ[JS]

laonยท2024๋…„ 6์›” 16์ผ
post-thumbnail

๋ฌธ์ œ ์„ค๋ช…

์–€์—์„œ๋Š” ๋งค๋…„ ๋‹ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ๊ฐ€ ์—ด๋ฆฝ๋‹ˆ๋‹ค. ํ•ด์„ค์ง„๋“ค์€ ์„ ์ˆ˜๋“ค์ด ์ž๊ธฐ ๋ฐ”๋กœ ์•ž์˜ ์„ ์ˆ˜๋ฅผ ์ถ”์›”ํ•  ๋•Œ ์ถ”์›”ํ•œ ์„ ์ˆ˜์˜ ์ด๋ฆ„์„ ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 1๋“ฑ๋ถ€ํ„ฐ 3๋“ฑ๊นŒ์ง€ "mumu", "soe", "poe" ์„ ์ˆ˜๋“ค์ด ์ˆœ์„œ๋Œ€๋กœ ๋‹ฌ๋ฆฌ๊ณ  ์žˆ์„ ๋•Œ, ํ•ด์„ค์ง„์ด "soe"์„ ์ˆ˜๋ฅผ ๋ถˆ๋ €๋‹ค๋ฉด 2๋“ฑ์ธ "soe" ์„ ์ˆ˜๊ฐ€ 1๋“ฑ์ธ "mumu" ์„ ์ˆ˜๋ฅผ ์ถ”์›”ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰ "soe" ์„ ์ˆ˜๊ฐ€ 1๋“ฑ, "mumu" ์„ ์ˆ˜๊ฐ€ 2๋“ฑ์œผ๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค.

์„ ์ˆ˜๋“ค์˜ ์ด๋ฆ„์ด 1๋“ฑ๋ถ€ํ„ฐ ํ˜„์žฌ ๋“ฑ์ˆ˜ ์ˆœ์„œ๋Œ€๋กœ ๋‹ด๊ธด ๋ฌธ์ž์—ด ๋ฐฐ์—ด players์™€ ํ•ด์„ค์ง„์ด ๋ถ€๋ฅธ ์ด๋ฆ„์„ ๋‹ด์€ ๋ฌธ์ž์—ด ๋ฐฐ์—ด callings๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฒฝ์ฃผ๊ฐ€ ๋๋‚ฌ์„ ๋•Œ ์„ ์ˆ˜๋“ค์˜ ์ด๋ฆ„์„ 1๋“ฑ๋ถ€ํ„ฐ ๋“ฑ์ˆ˜ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

5 โ‰ค players์˜ ๊ธธ์ด โ‰ค 50,000
players[i]๋Š” i๋ฒˆ์งธ ์„ ์ˆ˜์˜ ์ด๋ฆ„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
players์˜ ์›์†Œ๋“ค์€ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
players์—๋Š” ์ค‘๋ณต๋œ ๊ฐ’์ด ๋“ค์–ด๊ฐ€ ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
3 โ‰ค players[i]์˜ ๊ธธ์ด โ‰ค 10
2 โ‰ค callings์˜ ๊ธธ์ด โ‰ค 1,000,000
callings๋Š” players์˜ ์›์†Œ๋“ค๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฒฝ์ฃผ ์ง„ํ–‰์ค‘ 1๋“ฑ์ธ ์„ ์ˆ˜์˜ ์ด๋ฆ„์€ ๋ถˆ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

playerscallingsresult
["mumu", "soe", "poe", "kai", "mine"]["kai", "kai", "mine", "mine"]["mumu", "kai", "mine", "soe", "poe"]

ํ’€์ด

์ฒซ ๋ฒˆ์งธ ์‹œ๋„ - ์‹คํŒจ!!!

์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋กœ์˜ ์ž๋ฆฌ๋ฅผ ์Šค์™‘ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(n * m)์ด ๋˜์–ด ์‹คํŒจ๋ฅผ ํ–ˆ๋‹ค...

function solution(players, callings) {
    var answer = [];
    for(let i = 0;i<callings.length;i++){
        for(let j = 0;j<players.length;j++){
             // ๋งŒ์•ฝ ์ผ์น˜ํ•˜๋ฉด???
             if (callings[i] === players[j]) {
                 // 1๋“ฑ์ด ์•„๋‹๊ฒฝ์šฐ ์Šค์™‘
                if (j > 0) {
                    [players[j - 1], players[j]] = [players[j], players[j - 1]];
                }
                break;
            }
        }
    }
    return players;
}

๋‘ ๋ฒˆ์งธ ์‹œ๋„ - ์„ฑ๊ณต

์ฒ˜์Œ ์‹œ๋„ํ–ˆ์„๋•Œ ๋– ์˜ฌ๋ž๋˜ ๋ฐฉ๋ฒ•์€ map์„ ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ์˜€๋‹ค. ํ•˜์ง€๋งŒ "1LV๋ฌธ์ œ์ธ๋ฐ map์„ ์“ฐ๊ฒ ์–ด???"๋ผ๋Š” ์ƒ๊ฐ์— ๋ฐ”๋กœ ํŒจ์Šคํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ์ •๋‹ต์ด์—ˆ๋‹คใ…œใ…œ. map์„ ์‚ฌ์šฉํ•ด์„œ ๋“ฑ์ˆ˜๋ฅผ ์ €์žฅํ•ด๋‘๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ ๋“ฑ์ˆ˜๋ฅผ ๋ฐ”๊ฟ”์คฌ๋‹ค.

function solution(players, callings) {
    const playersMap = new Map();
    // map์„ ์‚ฌ์šฉํ•˜์—ฌ ๋“ฑ์ˆ˜ ์ €์žฅ
    for(let i = 0;i<players.length;i++){
        playersMap.set(players[i], i);
    }
    for(let i = 0;i<callings.length;i++){
        // ๋ถˆ๋ฆฐ ์ด๋ฆ„
        const callingPlayer = callings[i];
        // ๋ถˆ๋ฆฐ ์ด๋ฆ„ ๋“ฑ์ˆ˜
        const callingPlayerIndex = playersMap.get(callingPlayer);
        // ๋งŒ์•ฝ ๋ถˆ๋ฆฐ ์ด๋ฆ„ ๋“ฑ์ˆ˜๊ฐ€ 1๋“ฑ์ด ์•„๋‹ˆ๋ฉด
        if(callingPlayerIndex > 0){
            // ๋ถˆ๋ฆฐ ์ด๋ฆ„ ์•ž์— ๋“ฑ์ˆ˜ ์ด๋ฆ„
            const previousPlayer = players[callingPlayerIndex - 1];
            // ์Šค์™‘
            [players[callingPlayerIndex-1], players[callingPlayerIndex]] = [players[callingPlayerIndex], players[callingPlayerIndex-1]];
            // map์— ๋“ฑ์ˆ˜ ๋ฐ”๊ฟ”์ฃผ๊ธฐ
            playersMap.set(callingPlayer, callingPlayerIndex - 1);
            playersMap.set(previousPlayer, callingPlayerIndex);
        }
        
    }
    return players;
}

๋А๋‚€์ ๐Ÿ˜บ

์˜ค๋Š˜์€ ์•Œ๋ฐ”๋ฅผ ํ•˜๋ฉด์„œ ๊ฐ€๋งŒํžˆ ํ•ธ๋“œํฐ ํ•  ์‹œ๊ฐ„์— ์ฝ”ํ…Œ๋ฅผ ํ’€์–ด๋ณด์ž๊ณ  ๊ฒฐ์‹ฌํ–ˆ๋‹ค. ์„œ๋น™์„ ํ•˜๋ฉด์„œ ๋กœ์ง์„ ์ƒ๊ฐํ•˜๊ณ , ์ƒ๊ฐ์ด ๋๋‚ฌ์„ ๋•Œ๋งŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ํ‘ธ๋‹ˆ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค. ํ•˜์ง€๋งŒ ๋จธ๋ฆฌ ์†์œผ๋กœ ๋กœ์ง์„ ์ƒ๊ฐํ•˜๋Š” ์—ฐ์Šต์„ ํ•ด๋ณด๋‹ˆ ์˜์™ธ๋กœ ์ข‹์€ ํ•™์Šต๋ฒ• ๊ฐ™์•˜๋‹ค. ์˜ค๋Š˜์€ ์•Œ๋ฐ”๋„ ํ•˜๊ณ  ์ฝ”ํ…Œ๋„ ํ’€์—ˆ์œผ๋‹ˆ ์™„์ „ ๋Ÿญํ‚ค๋น„ํ‚ค์ž–์•„~~!!๐Ÿ€!!๐Ÿ€

profile
laonlaon

0๊ฐœ์˜ ๋Œ“๊ธ€