알고리즘
[프로그래머스] PCCE 기출 9번(java)
창따오
2024. 1. 3. 13:56
728x90


import java.util.*;
class Solution {
//동서남북 방향 정의하기
static int[] dx = {1,0,-1,0};//세로방향 정의
static int[] dy = {0,1,0,-1};//가로방향 정의
static boolean[][] visited;
static String[][] map;
static int answer;
public int solution(String[][] board, int h, int w) {
map = board;
int width = board[0].length;
int height = board.length;
visited = new boolean[height][width];
bfs(h,w);
return answer;
}
static void bfs(int x, int y){
String color = map[x][y];
for(int i=0; i<4; i++){
int nx = x+dx[i];
int ny = y+dy[i];
if(nx<0||nx>=map.length||ny<0||ny>=map[0].length) continue;
if(!map[nx][ny].equals(color))continue;
answer++;
}
}
}
성급한 일반화의 문제점
문제를 약간 기계적으로 푼다고 해야하나? 당연히 bfs문제라 생각하고, Queue를 사용하여 bfs를 구현하였다... 결과가 틀리지않은가?
나의 로직에 문제가 있나? 코드를 다시 들여다보아도 로직에 문제는 없어보인다. 그렇다면 왜???
문제를 다시 읽는다... 아 설마? 특정지점에서 좌, 우, 상, 하 만 check하면 끝이라는건가? 코드를 수정하였다. 연쇄적으로 동작하는 것이 아니라 딱 특정지점에서 ,좌,우,상,하 만 방문하도록... ->> 정답
문제를 잘읽고, 그상황에 맞게 구현할 필요가 있다.