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")