๐Ÿ”ฅ Algorithm/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] 1์ฐจ ํ”„๋ Œ์ฆˆ4๋ธ”๋ก (js)

Lennon 2021. 10. 31. 05:49
728x90
๋ฐ˜์‘ํ˜•

https://programmers.co.kr/learn/courses/30/lessons/17679/solution_groups?language=javascript 

 

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

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

programmers.co.kr

 

function popBlock(board){ 
    let count = 0;
    for(let i=1; i<board.length; i++){
        for(let j=1; j<board[i].length; j++){
            const value = board[i][j];
            
            if(value === 0) continue;
            
            const [left, up, diagonal] = [board[i][j-1], board[i-1][j], board[i-1][j-1]];
            
            if((value===up || up===value+String(1)) && 
               (value===left || left===value+String(1)) &&
               (value===diagonal || diagonal===value+String(1))){
                
                    if(up.length < 2){
                        board[i-1][j] = up+String(1);
                    }
                    if(left.length < 2){
                        board[i][j-1] = left+String(1);
                    }
                    if(diagonal.length < 2){
                        board[i-1][j-1] = diagonal+String(1);
                    }
                    if(board[i][j].length < 2){
                        board[i][j] = value+String(1);
                    }
                
                    count++;
            }
        }
    }
    return [board,count];
}


function pullDown(board){ // ํ–‰๊ณผ ์—ด ๋’ค์ง‘๊ณ  0 ์•ž์œผ๋กœ ๋•ก๊ธด ํ›„ ๋‹ค์‹œ ๋’ค์ง‘์–ด์„œ return
    let pullDownArr = [];
    let fnResult = [];
    for(let i = 0; i < board[1].length; i++){ // mํ–‰ n์—ด ๋ฐฐ์—ด nํ–‰ m์—ด๋กœ ๋ณ€ํ™˜
        let arr = [];
        for(let j = 0; j < board.length; j++){
            arr.push(board[j][i]);
        }
        arr = arr.map(v => {
            if(v.length > 1) return 0;
            else return v;
        })
        let sortArr = [];
        for(let idx=0; idx < arr.length; idx++){
            if(arr[idx]===0) sortArr.unshift(0);
            else sortArr.push(arr[idx]);
        } // 0์•ž์œผ๋กœ ๋•ก๊ธฐ๊ธฐ
        pullDownArr.push(sortArr); 
    }
    for(let i = 0; i < pullDownArr[1].length; i++){ // 0์•ž์œผ๋กœ ๋•ก๊ธด ํ›„ ์›๋ž˜๋Œ€๋กœ ๋ณ€ํ™˜
        let arr2 = [];
        for(let j = 0; j < pullDownArr.length; j++){
            arr2.push(pullDownArr[j][i]);
        }
        fnResult.push(arr2)
    }
    return fnResult; // ๋ฆฌํ„ด
}


function solution(m, n, board) {
    board = board.map(v => v.split(""));
    let answer = popBlock(board)[0];
    while(true){        
        answer = popBlock(answer)[0];
        answer = pullDown(answer);
        if(popBlock(answer)[1] === 0) break;
    }
    
    return answer.reduce((prev, cur) => {
        let count = 0;
        cur.forEach(v => {
            if(v===0) count++;
        })
        return prev+count;
    },0);
}

 

popBlock ํ•จ์ˆ˜ => 2x2 ๋ธ”๋ก์ด pop๋˜๋Š” ๊ฑธ ๊ธฐ๋ก (pop๋˜๋ฉด ํ•ด๋‹น index๊ฐ’์˜ 1์„ ๋ถ™ํ˜€์„œ ์ €์žฅ) ex) R -> R1

                         => 2X2๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฒƒ๋„ ์ œ๊ฑฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ if๋ฌธ ์šฉ์ดํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•จ (R==R1)

                         => ํ…Œ์ŠคํŠธ์ผ€์ด์Šค 8๋ฒˆ 10๋ฒˆ์ด ์•ˆ๋˜๋ฉด ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋ฌธ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฑธ ์ˆ˜๋„ ์žˆ์Œ 

                               ex) R1์ธ๋ฐ ํ•ด๋‹น๋˜์–ด ๋˜ 1์„ ๋”ํ•ด R11์ด ๋จ => ํ•จ์ˆ˜ ๋‚ด if์กฐ๊ฑด์— ์•ˆ ๋งž์•„ pop์ด ์•ˆ๋จ

                                    => 1์€ ํ•˜๋‚˜๋งŒ ๋ถ™์„ ์ˆ˜ ์žˆ๋„๋ก ์กฐ์ •( ex) 15๋ผ์ธ)

 

                        ํ•ด๋‹น ํ•จ์ˆ˜์—์„œ count๊ฐ€ 0์ด๋ฉด solutionํ•จ์ˆ˜์—์„œ while์— break๊ฑธ ์ˆ˜ ์žˆ๋„๋ก ํ•จ

                        => pop๋˜๋Š” 2x2 ๋ธ”๋ก์ด ์—†์œผ๋ฉด ๋๋‚ด์•ผํ•จ

 

 

pullDown ํ•จ์ˆ˜ => ์—ฐ์‚ฐ์ด ๋๋‚œ ํ›„ pop๋œ ๋ถ€์œ„์— ์œ„์— ์žˆ๋Š” ๊ฐ’๋“ค์„ ๋‚ด๋ฆฌ๋Š” ํ•จ์ˆ˜

                         ๋ฌธ์ž ๋’ค์— 1์ด ๋ถ™์€ ๊ฐ’์„ 0์œผ๋กœ ๋ฐ”๊พผ ํ›„ ํ–‰๋ ฌ์„ ๋’ค์ง‘๊ณ  0์„ ์•ž์œผ๋กœ ๋•ก๊ธด ํ›„ ๋‹ค์‹œ ํ–‰๋ ฌ์„ ๋’ค์ง‘๊ณ                                return   

 

 

=> ex) [ [A, B, C], [A, A1, C] ] => [ [A, A], [B, A1], [C, C] ] => [ [A, A], [0, B], [C, C] ] => [ [A, 0, C], [A, B, C] ]

                ๊ฒฐ๊ณผ ํ–‰๋ ฌ(3x2)                     2x3์œผ๋กœ ๋’ค์ง‘์Œ             ๋ฌธ์ž๋’ค์— 1์žˆ๋Š” ๊ฐ’       ๋‹ค์‹œ 3x2๋กœ๋งŒ๋“ค๊ณ  ๋ฆฌํ„ด

                                                                               =>0์œผ๋กœ ๋ณ€ํ™˜ ํ›„ ๋งจ ์•ž์œผ๋กœ ๋•ก๊น€   

 

 

 

solution ํ•จ์ˆ˜์—์„œ while๋ฌธ์„ ํ†ตํ•ด ๋ฃจํ”„๋ฅผ ๋ˆ ํ›„ ๊ฒฐ๊ณผ ํ–‰๋ ฌ์— ๋Œ€ํ•ด 0์˜ ๊ฐœ์ˆ˜(pop๋œ ๊ฐœ์ˆ˜)๋ฅผ ์„ผ ํ›„ returnํ•˜๋ฉด ์ •๋‹ต!

 

 

๋‹ค์Œ์—” ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ํ•˜๋„๋ก ๋” ๋‚˜๋ˆ ์„œ ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค.

 

                    

728x90
๋ฐ˜์‘ํ˜•