[Programmers_CT] 18. 이웃한 칸

문정준's avatar
Feb 26, 2025
[Programmers_CT] 18. 이웃한 칸
💡
프로그래머스 코딩 테스트 2. 이웃한 칸
 

1. 문제 설명

notion image
 

제한 사항

notion image

2. 입출력 예시

notion image
notion image

3. 코드 작성

class Solution { public int solution(String[][] board, int h, int w) { int answer = 0; // 같은 색 칸의 개수 int n = board.length; // 2차원 보드 (정사각형) // x, y 증가분 int[] dh = { 0, 1, -1, 0 }; int[] dw = { 1, 0, 0, -1 }; // 상, 하, 좌, 우 칸 검사 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 < n) && (w_check < n)){ if(board[h][w].equals(board[h_check][w_check])) { answer++; } } } // 결과 전송 return answer; } }
  1. 같은 색 칸의 개수를 셀 변수 answer 선언
  1. board의 크기를 저장할 변수 n 선언
  1. x, y를 상, 하, 좌, 우와 비교하기 위해 x, y의 증가분을 각각 dh, dw로 설정
    1. dh = [0, 1, -1, 0]
    2. dw = [1, 0, 0, -1]
  1. 상, 하, 좌, 우의 총 4칸을 검사하기 때문에 반복문은 0에서 3까지 반복
    1. 기준점의 옆 칸의 좌표를 저장할 h_check, w_check 선언
      1. h_check = h + dh[i];
      2. w_check = w + dw[i];
    2. h_check과 w_check이 0 이상이고, h_check과 w_check이 n 미만일 때 칸 검사
        • IndexOutOfBounds 오류 방지
        • 원래 칸의 색과 다른 칸의 색이 같으면, answer++
          • String은 연산자로 비교하는 것이 아닌, String.equals() 사용
          • if(board[h][w].equals(board[h_check],[w_check])) answer++;

4. 테스트 결과

notion image
 

5. 채점

notion image
Share article

sxias