프로그래머스 코딩 테스트 2. 이웃한 칸
1. 문제 설명

제한 사항

2. 입출력 예시


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;
}
}
- 같은 색 칸의 개수를 셀 변수 answer 선언
- board의 크기를 저장할 변수 n 선언
- x, y를 상, 하, 좌, 우와 비교하기 위해 x, y의 증가분을 각각 dh, dw로 설정
- dh = [0, 1, -1, 0]
- dw = [1, 0, 0, -1]
- 상, 하, 좌, 우의 총 4칸을 검사하기 때문에 반복문은 0에서 3까지 반복
- 기준점의 옆 칸의 좌표를 저장할 h_check, w_check 선언
- h_check = h + dh[i];
- w_check = w + dw[i];
- 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. 테스트 결과

5. 채점

Share article