Algorithm/CodingTest

[Programmers] PCCE 기출문제 9번 / 이웃한 칸

누구세연 2024. 1. 2. 20:27

https://school.programmers.co.kr/learn/courses/30/lessons/250125?language=java

 

프로그래머스

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

programmers.co.kr

 

이웃한 칸이라는 문제 Java로 풀이하겠습니다.

이 문제는 주어진 2차원 격자 보드에서 특정 위치 (h, w)의 칸과 같은 색깔로 색칠된 이웃한 칸의 개수를 찾는 문제입니다.

이웃한 칸은 위, 아래, 왼쪽, 오른쪽 방향에 위치한 칸을 의미합니다.

  1.  주어진 위치에서 상, 하, 좌, 우로 이동하며 이웃한 칸의 색상을 확인합니다.
  2. 이웃한 칸의 색상이 현재 위치의 칸과 같으면 개수를 증가시킵니다.
  3. 모든 방향에 대해 이웃한 칸을 확인한 후, 같은 색으로 색칠된 칸의 개수를 반환합니다.

저는 다음과 같이 풀이하였습니다.

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};

        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 (board[h][w].equals(board[hCheck][wCheck])) {
                    count++;
                }
            }
        }

        return count;
    }
}
  1. 이웃한 칸 중 같은 색으로 색칠한 칸의 개수를 셀 count라는 변수를 선언합니다.
  2. 'dh'와 'dw'배열은 각각 상, 하, 좌, 우 방향으로의 이동을 나타냅니다.
  3. 네 가지 방향에 대해 이웃한 칸을 확인하고, 이웃한 칸의 좌표가 유효한 범위 내에 있는지 확인합니다.
  4. 이웃한 칸의 색상이 현재 위치의 칸과 같으면 개수(count)를 증가시킵니다.
  5. 최종적으로 같은 색으로 색칠된 이웃한 칸의 개수(count)를 반환합니다.

 

저는 위와 같은 로직으로 문제를 풀이하였습니다.

이견이 있으시다면 자유롭게 댓글 남겨주세요.