프로그래머스 (PCCP) | LV.1 이웃한 칸 - BFS 문풀 (Java)

728x90

⬛ 프로그래머스 (PCCP) | LV.1 이웃한 칸 - BFS 문풀 (Java)

https://school.programmers.co.kr/learn/courses/30/lessons/250125

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명


💚문제 접근 방식

처음에는 BFS함수를 만들어서 풀고자 했는데 문제를 제대로 읽어보면 현재 정점은 h,w로 고정이고 움직임 없이 현재 정점 기준으로 상하좌우에 인접한 동일 색깔 개수만 구하면 되는 문제였다. 그러니 BFS로 현재 정점을 계속 갱신하면서 풀 이유가 없는 문제였다.

BFS 로직처럼 생각하되 현재 정점을 따로 갱신할 Queue는 불필요하므로 4가지 방향 전환만 해주며 풀면 쉽게 풀리는 문제이다. 데이터 길이는 매우 작아서 따로 효율성을 심각하게 고려할 문제는 아니었다.

 

1) dx, dy로 4방향 지칭용 변수를 선언한다.

2) 문제에서 board는 정사각형이다. 가로 세로가 n으로 같다. 이 값을 경계값으로 활용하여 경계를 넘는 경우 continue;

3) 매번 nx, ny로 현재 정점 (h,w) 기준으로 4방향을 탐색할 때 동일한 색깔 갖는 애 보면 answer++처리

4) return answer 하면 정답 반환된다.

 

💚 제출 코드

import java.util.*;
class Solution {
    //4방향 변수 
    static int[] dx = {0, 0, 1, -1};
    static int[] dy = {1, -1, 0, 0};
    
    //솔루션 함수 
    public int solution(String[][] board, int h, int w) {
        int answer = 0;
        int n = board.length;

        for(int k=0; k<4; k++){
            int nx = h + dx[k];
            int ny = w + dy[k];
            if(nx < 0 || ny < 0 || nx >=n || ny>=n) continue;
            if(board[nx][ny].equals(board[h][w])) answer++;
        }
        
        return answer;
    }
}
728x90