본문 바로가기

programmers

프로그래머스 [[PCCE 기출문제] 9번 / 이웃한 칸](C++) -yes6686- 티스토리

728x90
반응형
SMALL

프로그래머스 문제 풀이: 250125 [붕대 감기]


문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/250125

문제 설명:

주어진 board에서 특정 위치 (h, w)를 기준으로 상하좌우에 같은 값이 있는 경우의 개수를 반환하는 문제입니다.


문제 해결 코드


#include <string>
#include <vector>
using namespace std;

int dx[4] = {0, 0, 1, -1}; // 상, 하, 좌, 우
int dy[4] = {1, -1, 0, 0};

int solution(vector<vector<string>> board, int h, int w) {
    int answer = 0;
    
    for (int i = 0; i < 4; i++) {
        int nx = h + dx[i];
        int ny = w + dy[i];

        // 범위 체크
        if (nx < 0 || ny < 0 || nx >= board.size() || ny >= board[0].size()) continue;

        // 동일한 값인지 확인
        if (board[h][w] == board[nx][ny]) answer++;
    }
    
    return answer;
}

예제 입력:

board = [["A", "B", "A"],
         ["B", "A", "B"],
         ["A", "B", "A"]]
h = 1, w = 1

예제 출력:

4

코드 설명

  • 핵심 알고리즘: 현재 위치 (h, w)를 기준으로 상하좌우의 값을 비교하여 같은 값이 몇 개 있는지 계산합니다.
  • 구현 세부사항:
    • dx, dy 배열을 이용하여 4방향 탐색을 수행합니다.
    • 배열의 범위를 벗어나는 경우를 체크하여 예외를 방지합니다.
    • 현재 위치의 값과 비교하여 동일한 경우 answer 값을 증가시킵니다.
  • 시간 복잡도: O(1), 항상 4개의 방향만 탐색하므로 상수 시간

결과

주어진 좌표를 기준으로 상하좌우에 같은 값이 몇 개 있는지 정확히 계산합니다. 2차원 배열 탐색을 연습하는 데 적합한 문제입니다. 추가적인 질문이나 개선 사항이 있다면 댓글로 알려주세요!

728x90
반응형
LIST