프로그래머스 1단계

프로그래머스 [이웃한 칸]

dev-lee 2026. 3. 2. 20:44

이번 문제는 아래와 같은 의사코드가 함께 있었다.

1. 정수를 저장할 변수 n을 만들고 board의 길이를 저장합니다.
2. 같은 색으로 색칠된 칸의 개수를 저장할 변수 count를 만들고 0을 저장합니다.
3. h와 w의 변화량을 저장할 정수 리스트 dh, dw를 만들고 각각 [0, 1, -1, 0], [1, 0, 0, -1]을 저장합니다.
4. 반복문을 이용해 i 값을 0부터 3까지 1 씩 증가시키며 아래 작업을 반복합니다.
    4-1. 체크할 칸의 h, w 좌표를 나타내는 변수 h_check, w_check를 만들고 각각 h + dh[i], w + dw[i]를 저장합니다.
    4-2. h_check가 0 이상 n 미만이고 w_check가 0 이상 n 미만이라면 다음을 수행합니다.
        4-2-a. board[h][w]와 board[h_check][w_check]의 값이 동일하다면 count의 값을 1 증가시킵니다.
5. count의 값을 return합니다.

 

여기서 새로 배운 발상은 변화량을 저장할 리스트 dh, dw를 만들어서 위, 아래, 오른쪽, 왼쪽으로 움직이는 경우의 수 4가지를 배열 두개로 구현했다는 것이다.

class Solution {
    public int solution(String[][] board, int h, int w) {
        int answer = 0;
        int end = board.length;
        
        // 네 개의 방향을 정해서 두 개의 배열로 표현
        int[] dh = new int[] {0, 1, -1, 0};
        int[] dw = new int[] {1, 0, 0, -1};
        
        // 0,1,2,3으로 네 개의 방향 표현
        for(int i = 0; i < 4; i++) {
            int h_check = h+dh[i];
            int w_check = w+dw[i];
            // 해당 좌표의 상하좌우가 보드 안에 있으면
            if(h_check >= 0 && w_check >= 0 && h_check < end && w_check < end) {
                // 같은 색인지 체크하고 answer에 1을 더해줌
                if(board[h][w].equals(board[h_check][w_check])) {
                    answer++;
                }
            }
        }
        return answer;
    }
}