728x90
🔗 문제 링크
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📌 문제 개요
2차원 문자열 배열 board가 주어진다.
각 칸에는 색깔 이름이 문자열로 저장되어 있고, 특정 위치를 나타내는 h, w가 주어진다.
이때 board[h][w]와 위, 아래, 왼쪽, 오른쪽으로 인접한 칸들 중 같은 색깔을 가진 칸의 개수를 구하는 문제이다.
📌 접근 방법
현재 위치의 색깔을 기준으로 상하좌우 네 방향을 확인한다.
2차원 배열에서 상하좌우 이동은 방향 배열을 사용하면 깔끔하게 처리할 수 있다.
int[] dh = {0, 1, -1, 0};
int[] dw = {1, 0, 0, -1};
각 방향으로 이동한 좌표가 보드 범위 안에 있는지 확인한 뒤, 색깔이 같으면 count를 증가시킨다.
📌 핵심 아이디어
1. 기준 색깔 저장하기
String color = board[h][w];
현재 선택한 칸의 색깔을 저장해두고, 주변 칸과 비교한다.
2. 상하좌우 방향 배열 만들기
각 인덱스는 하나의 방향을 의미한다.
int[] dh = {0, 1, -1, 0};
int[] dw = {1, 0, 0, -1};
h + dh[i]
w + dw[i]
형태로 이동할 칸의 좌표를 구할 수 있다.
3. 보드 범위 확인하기
상하좌우를 확인하다 보면 보드 밖 좌표가 나올 수 있다.
따라서 배열에 접근하기 전에 반드시 범위 체크를 먼저 해야 한다.
if (hCheck >= 0 && hCheck < n && wCheck >= 0 && wCheck < n)
4.문자열 비교하기
Java에서 문자열 값을 비교할 때는 ==가 아니라 equals()를 사용해야 한다.
if (color.equals(board[hCheck][wCheck])) {
count++;
}
📌 전체 코드
class Solution {
public int solution(String[][] board, int h, int w) {
int n = board.length;
int count = 0;
int[] dh = {0, 1, -1, 0};
int[] dw = {1, 0, 0, -1};
String color = board[h][w];
for (int i = 0; i < 4; i++) {
int hCheck = h + dh[i];
int wCheck = w + dw[i];
if (hCheck >= 0 && hCheck < n && wCheck >= 0 && wCheck < n) {
if (color.equals(board[hCheck][wCheck])) {
count++;
}
}
}
return count;
}
}
📄 정리
- 선택한 칸의 색깔과 상하좌우 칸의 색깔을 비교하는 문제이다.
- 방향 배열을 사용하면 네 방향 탐색을 간결하게 구현할 수 있다.
- 배열 범위 체크를 먼저 해야 IndexOutOfBoundsException을 방지할 수 있다.
- 문자열 비교는 equals()를 사용해야 한다.
728x90
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
| 프로그래머스 JadenCase 문자열 만들기 JAVA 풀이 (문자열, 구현) (0) | 2026.06.20 |
|---|---|
| 프로그래머스 최댓값과 최솟값 JAVA 풀이 (문자열, 구현) (0) | 2026.06.18 |
| 프로그래머스 실패율 JAVA 풀이 (정렬, 구현) (0) | 2026.06.17 |
| 프로그래머스 덧칠하기 JAVA 풀이 (그리디) (0) | 2026.06.16 |
| 프로그래머스 소수 만들기 JAVA 풀이 (조합, 소수 판별) (0) | 2026.06.16 |