Programming/백준

[실버 4] 백준 18242 - 네모네모 시력검사 (파이썬)

pental 2025. 5. 5. 19:39

https://www.acmicpc.net/problem/18242

풀이

  • #으로 구성된 직사각형 모양에서 하나의 칸만 .으로 뚫려 있음.
  • 이 구멍이 어느 방향에 뚫려 있는지 출력해야 함: UP, DOWN, LEFT, RIGHT
min_y, max_y, min_x, max_x = 1e9, 0, 1e9, 0

for i in range(N):
    for j in range(M):
        if B[i][j] == '#':
            min_y = min(min_y, i)
            max_y = max(max_y, i)
            min_x = min(min_x, j)
            max_x = max(max_x, j)

“#”의 좌표 중 가장 위, 아래, 왼쪽, 오른쪽을 찾아 네모의 범위를 확인한다.

center_y, center_x = (min_y + max_y) // 2, (min_x + max_x) // 2

문제에서는 각 변의 중간 부분이 뚫려있다고 하였기에, 중심좌표를 계산한다.

이 좌표 기준으로 방향 탐색을 진행 할 것이다.

if B[min_y][center_x] == '.':
    print("UP")
elif B[max_y][center_x] == '.':
    print("DOWN")
elif B[center_y][min_x] == '.':
    print("LEFT")
else:
    print("RIGHT")

직사각형 테두리 중앙에 있는 좌표 중 하나가 “,”이면 그 방향이 구멍이다.

코드

# 백준 18242 - 네모네모 시력검사
# 분류 : 구현

N, M = map(int, input().split())
B = [input() for _ in range(N)]

min_y, max_y, min_x, max_x = 1e9, 0, 1e9, 0

for i in range(N) :
    for j in range(M) :
        if B[i][j] == '#' :
            min_y = min(min_y, i)
            max_y = max(max_y, i)
            min_x = min(min_x, j)
            max_x = max(max_x, j)

center_y, center_x = (min_y + max_y) // 2, (min_x + max_x) // 2

if B[min_y][center_x] == '.' :
    print("UP")
elif B[max_y][center_x] == '.' :
    print("DOWN")
elif B[center_y][min_x] == '.' :
    print("LEFT")
else :
    print("RIGHT")