본문 바로가기
코딩테스트/프로그래머스

프로그래머스 | Python | Brute Froce | [PCCE 기출문제] 9번 / 이웃한 칸 (Lv.1)

by RuntimeSimple 2025. 2. 27.

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

문제 풀이

이 문제는 2차원 배열(격자)에서 특정 위치의 상하좌우 칸을 탐색하여 동일한 색상의 개수를 계산하는 문제입니다. 인접 탐색조건 검사가 핵심입니다.


Python 코드

def solution(board, h, w):
    # 보드의 크기
    n = len(board)
    # 결과를 저장할 변수
    count = 0
    # 상하좌우 이동 좌표
    dh = [0, 1, -1, 0]  # 행 변화량
    dw = [1, 0, 0, -1]  # 열 변화량
    # 기준 색상
    color = board[h][w]

    # 인접 4칸 탐색
    for i in range(4):
        # 이동한 좌표 계산
        h_check = h + dh[i]
        w_check = w + dw[i]

        # 유효한 범위인지 확인
        if 0 <= h_check < n and 0 <= w_check < n:
            # 동일한 색상인지 확인
            if board[h_check][w_check] == color:
                count += 1

    return count

코드 설명

  1. board의 크기 계산:
    •   n = len(board)로 2차원 배열의 크기를 계산합니다. 이는 유효한 탐색 범위를 확인하는 데 사용됩니다.
  2. 상하좌우 이동 좌표 정의:
    •   dh와 dw를 사용해 각각의 방향으로의 이동을 정의합니다.
  3. 기준 색상 저장:
    •   color = board[h][w]를 통해 주어진 위치의 색상을 저장합니다.
  4. 인접 칸 탐색:
    •   반복문을 통해 상하좌우의 칸(h_check, w_check)을 계산합니다.
    •   if 0 <= h_check < n and 0 <= w_check < n 조건으로 유효한 범위인지 검사합니다.
    •   인접 칸의 색상이 기준 색상(color)과 동일하면 count를 1 증가시킵니다.
  5. 결과 반환:
    •   인접한 동일 색상의 개수(count)를 반환합니다.

출제 의도

  1. 인접 탐색 구현:
    •   2차원 배열의 특정 위치에서 인접한 칸을 효율적으로 탐색하는 방법을 학습합니다.
  2. 조건 검사:
    •   배열의 유효 범위 조건 및 값 비교를 통해 논리적 처리 능력을 평가합니다.
  3. 배열 인덱스 처리:
    •   인덱스 계산 및 유효성을 체크하는 방법을 연습합니다.

핵심 문법

  1. 2차원 배열 탐색:
    •   행과 열의 이동을 위한 방향 벡터(dh, dw) 정의.
    •   이동한 좌표(h_check, w_check) 계산.
  2. 조건 검사:
    •   if 0 <= h_check < n and 0 <= w_check < n을 통해 배열 경계를 벗어나지 않는지 확인.
  3. 비교 연산:
    •   기준 색상과 인접한 칸의 색상을 비교하여 동일한 경우 처리.

예제 설명

예제 1

입력:

board = [["blue", "red", "orange", "red"],
         ["red", "red", "blue", "orange"],
         ["blue", "orange", "red", "red"],
         ["orange", "orange", "red", "blue"]]
h, w = 1, 1

실행 과정:

  • color = "red"
  • 인접 칸:
    •   (1, 2): "blue" → 다른 색.
    •   (2, 1): "orange" → 다른 색.
    •   (1, 0): "red" → 같은 색 → count += 1.
    •   (0, 1): "red" → 같은 색 → count += 1.
  • 결과: count = 2.

출력:

2

알고리즘 분류

  1. 시뮬레이션:
    •   격자를 순차적으로 탐색하며 문제의 조건을 구현.
  2. 브루트포스(완전 탐색):
    •   인접 칸(최대 4칸)을 모두 검사하는 방식.