[programmers] [PCCE 기출문제] 9번 / 이웃한 칸 (java)

각 칸마다 색이 칠해진 2차원 격자 보드판이 있습니다. 그중 한 칸을 골랐을 때, 위, 아래, 왼쪽, 오른쪽 칸 중 같은 색깔로 칠해진 칸의 개수를 구하려고 합니다.
보드의 각 칸에 칠해진 색깔 이름이 담긴 이차원 문자열 리스트 board와 고른 칸의 위치를 나타내는 두 정수 h, w가 주어질 때 board[h][w]와 이웃한 칸들 중 같은 색으로 칠해져 있는 칸의 개수를 return 하도록 solution 함수를 완성해 주세요.
이웃한 칸들 중 몇 개의 칸이 같은 색으로 색칠되어 있는지 확인하는 과정은 다음과 같습니다.

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

#배열  #탐색

 

 

 

기준 칸에서 상, 하, 좌, 우를 탐색해야 하기 때문에 몇칸씩 움직이면 되는지 2차원 배열을 만들어 둔다.

그 배열을 순회하면서 주변 칸의 좌표를 찾고 0 이하나 전체 배열 길이보다 긴 값인 경우인지 확인하고 

배열 안에 있는 좌표인 경우 기준 칸의 색과 같은지 확인한다.

 

** 무지성 == 대신 내용 비교할 땐 equal 쓰자!!

 

class Solution {
    public int solution(String[][] board, int h, int w) {
        int answer = 0;
        int l = board.length;
        String color = board[h][w]; // 비교할 기준 칸의 색
        
        // 위, 아래, 왼쪽, 오른쪽 x, y 증감 값
        int[][] move =  {{0, -1}, {0, 1}, {-1, 0}, {1, 0}};
        
        for (int[] m : move) {
            int hh = h - m[0];
            int ww = w - m[1];
            
            // 인덱스 범위 벗어나지 않는지 체크
            if (hh < 0 || hh >= l || ww < 0 || ww >= l) {
                System.out.println("break?");
                continue;
            } else if (board[hh][ww].equals(color)) {
                answer++;
            }
        }
        
        return answer;
    }
}