DevYoon

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„ (Javascript) ๋ณธ๋ฌธ

PS/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„ (Javascript)

gimewn 2022. 9. 21. 00:01

link ๐Ÿ”— https://school.programmers.co.kr/learn/courses/30/lessons/64061?language=javascript 

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๐Ÿงธ ์ธํ˜•์„ ํฌ๋ ˆ์ธ์—์„œ ๋ฝ‘์•„์ฃผ๊ณ , ๋ฐ”๊ตฌ๋‹ˆ์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ์™€ ๊ฒ€์‚ฌํ•˜์—ฌ ์‚ญ์ œํ•ด์ฃผ๋Š” ์ˆœ์œผ๋กœ ๋กœ์ง์„ ์‹คํ–‰ํ•˜์˜€๋‹ค.

๐Ÿงธ ์ธํ˜•์„ ๋ฝ‘๋Š” ๊ฒฝ์šฐ, ์—ด์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•˜์—ฌ 0์ด ์•„๋‹Œ ์ˆ˜๊ฐ€ ๋‚˜์˜ค๋ฉด ๋งจ ์œ„์˜ ์ธํ˜•์ด๋ฏ€๋กœ ๊ทธ ๊ฐ’์„ return ํ•ด์ค€๋‹ค

๐Ÿงธ ๊ทธ ํ›„ ๋ฐ”๊ตฌ๋‹ˆ ๊ฒ€์‚ฌ ํ•จ์ˆ˜๋กœ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์–ด ๋งˆ์ง€๋ง‰ ์›์†Œ์™€ ๋น„๊ต, ๊ฐ™์œผ๋ฉด ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์‚ญ์ œ, ๊ฐ™์ง€ ์•Š์œผ๋ฉด ๋ฝ‘์€ ์ธํ˜•์„ ๋ฐ”๊ตฌ๋‹ˆ์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

๐Ÿงธ ๋‹จ, ๋ฐฐ์—ด์ด ๋นˆ ๋ฐฐ์—ด์ผ ๊ฒฝ์šฐ ๋น„๊ตํ•  ๋Œ€์ƒ์ด ์—†์œผ๋ฏ€๋กœ ๋ฌด์กฐ๊ฑด ๋ฐ”๊ตฌ๋‹ˆ์— ๋„ฃ์–ด์ค€๋‹ค.

 

function solution(board, moves) {
    var answer = 0;
    let len = board.length;
    let basket = [];
    function crain(col){
        for (let row = 0; row<len; row++){
            // ์—ด์˜ 0์ด ์•„๋‹Œ ์ตœ์ดˆ์˜ ๊ฐ’ => ๋งจ ์œ„์— ์žˆ๋Š” ์ธํ˜•
            if(board[row][col] !== 0){
                let tmp = board[row][col];
                // ๋ฝ‘์•˜์œผ๋‹ˆ๊นŒ 0์œผ๋กœ ์ดˆ๊ธฐํ™”
                board[row][col] = 0;
                return tmp
            }
        }
    }
    function removeDoll(doll){
        // basket์ด ๋นˆ ๋ฐฐ์—ด์ด๋ฉด ๋น„๊ตํ•  ๋Œ€์ƒ ์—†์œผ๋ฏ€๋กœ
        if(!basket){
            // ๊ทธ๋ƒฅ ๋„ฃ์–ด์คŒ
            basket.push(doll)
        }else{
            // ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ๊ณ„์‚ฐ
            let bask_len = basket.length-1;
            // ๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ€ ์ƒˆ๋กœ ๋ฝ‘์€ ์ธํ˜•๊ณผ ๋™์ผํ•˜๋‹ค๋ฉด
            if(basket[bask_len] === doll){
                // ๋งˆ์ง€๋ง‰ ์›์†Œ ์‚ญ์ œ
                basket.pop();
                // answer์— 2 ๋”ํ•ด์ฃผ๊ธฐ
                answer += 2;
            }else{
                // ๊ฐ™์ง€ ์•Š์œผ๋ฉด ๋ฐฐ์—ด์— ์ƒˆ๋กœ ๋ฝ‘์€ ์ธํ˜• ๋„ฃ์–ด์ฃผ๊ธฐ
                basket.push(doll)
            }
        }
    }
    // moves ๋ฐฐ์—ด ์ˆœํšŒํ•˜๋ฉด์„œ ์ธํ˜• ๋ฝ‘๊ณ  => ๋ฐ”๊ตฌ๋‹ˆ ๊ฒ€์‚ฌ ์‹คํ–‰
    moves.forEach((seq) => {
        let ans = crain(seq-1);
        // ์ธํ˜•์„ ๋ฝ‘์•˜๋‹ค๋ฉด (undefined๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด)
        if(ans){
            // ๋ฐ”๊ตฌ๋‹ˆ ๊ฒ€์‚ฌ
            removeDoll(ans)   
        }
    })
    return answer;
}