본문 바로가기
개발 지식 B+/코딩 테스트

프로그래머스 level2 배지 획득!

by ddubbu 2021. 1. 10.
728x90
반응형

진짜 겁나 보람차다 ㅜㅜ

물론 차근차근 연습문제 다 격파하고 진행했어야했는데, 마음 급한 나머지 ㅎㅎ

 

 

다시 매진해서 코테 공부해보자.

조합 구하는 PickorNot 익숙해질 필요있고

 

프렌즈 4블록 드디어 풀었다!!

다만 내 코드에서 왜 count 변수로는 적절히 계산이 안됬는지 원...

 

4, 5, ["CCBDE", "AAADE", "AAABF", "CCBBF"]
답>> 14
function isSame(row, col, board){
    let target = board[row][col];
    if(target === '.') return false;

    if(board[row][col+1] === target && board[row+1][col] === target && board[row+1][col+1] === target){
        return true;
    }
    else false;
}


function solution(m, n, board) {
    board = board.map((line)=> line.split(''));
    let count = 0; // remove blocks
    let isChange = true;
    let N = board.length;
    while(isChange){
        let willRemove = [];
        isChange = false;
        for(let row=0; row<=m-2; row++){
            for(let col=0; col<=n-2; col++){
                // 지울 리스트 만들기 (중복될 수 있어서 나중에 지움)
                if(isSame(row, col, board)){
                    willRemove.push([row, col], [row, col+1], [row+1, col], [row+1, col+1]);
                }
            }
        }

        // 중복 없애기
        willRemove = Array.from(new Set(willRemove));

        // 지우기
        for(let i=0; i<willRemove.length; i++){
            isChange = true;
            let row = willRemove[i][0],
                col = willRemove[i][1];
            board[row][col] = '.';
            count ++;
            // console.log(board);
        }
        // console.log("지우기 완료 =======================")

        // 아래로 뗑기기
        let isChange2 = true;
        while(isChange2){
            isChange2 = false; 
            for(let col = 0; col<n; col++){
                for(let row = m-1; row>=1; row--){
                    if(board[row][col] === '.'){
                        if(board[row-1][col] !== '.') isChange2 = true;
                        board[row][col] = board[row-1][col];
                        board[row-1][col] = '.'
                    }
                }
            }            
        }
        // console.log(board)
        // console.log("아래로 땡기기 완료 =======================")

    }

    let result = 0;
    for(let row=0; row<m; row++){
        for(let col=0; col<n; col++){
            if(board[row][col] === '.') result += 1;
        }
    }
    return result;

    // return count;
}

 

 

의사코드 / 구상 그림은 나중에 공유하겠다.

 


 

1월 10일 level 1 남은 5문제 Clear

반응형

'개발 지식 B+ > 코딩 테스트' 카테고리의 다른 글

프로그래머스 | 옹알이 - 재귀로 풀기  (0) 2022.10.31
순열 - 재귀로 구현  (0) 2020.12.12