테트로미노 문제도 같은 골드 5인데 왜 이건 훨씬 쉽지?
단순 구현 문제다.
import sys
CLEANED = 2
NORTH, EAST, SOUTH, WEST = 0, 1, 2, 3
N, M = map(int, sys.stdin.readline().rstrip().split())
r, c, d = map(int, sys.stdin.readline().rstrip().split())
room = []
for _ in range(N):
room.append(list(map(int, sys.stdin.readline().rstrip().split())))
def next_rcd(r, c, d):
for _ in range(4):
if d == NORTH:
if room[r][c-1] == 0:
return r, c-1, WEST
d = WEST
elif d == WEST:
if room[r+1][c] == 0:
return r+1, c, SOUTH
d = SOUTH
elif d == SOUTH:
if room[r][c+1] == 0:
return r, c+1, EAST
d = EAST
else: # EAST
if room[r-1][c] == 0:
return r-1, c, NORTH
d = NORTH
# 4번 실행 후
if d == NORTH:
if room[r+1][c] != 1:
return r+1, c, d
elif d == WEST:
if room[r][c+1] != 1:
return r, c+1, d
elif d == SOUTH:
if room[r-1][c] != 1:
return r-1, c, d
else: # EAST
if room[r][c-1] != 1:
return r, c-1, d
raise
answer = 0
while True:
if room[r][c] != CLEANED:
room[r][c] = CLEANED
answer += 1
try:
r, c, d = next_rcd(r, c, d)
except:
break
print(answer)
raise
를 활용하여 깔끔하게 코딩된 것 같아 올린다.
방향 전환을 나처럼 조건을 나눠서 처리하는 것이 아니라, (dy, dx) 배열 [(-1,0), (0,1), (1,0), (0,-1)]
을 만들어서 하나의 수식으로 처리하는 풀이도 많이 보였는데, 그렇게 하면 더 가독성 떨어질 것 같아서 굳이 하진 않았다.