코드 다 짜놓고 입력값을 잘못 이해하고 있어서 쓸데없이 오래걸렸다ㅡㅡ
오류1 - 입력값 r, c
가 1부터 시작하는 줄 알고 배열에 적용한다고 -1을 해줬었다.
오류2 - direction
에 r, c
를 반대로 넣고 있었다.....
오류 잡는다고 1시간 걸렸는데 어이없다 진짜;;
방향에 따라 탐색을 시작하는 좌표 순서가 달라지기 때문에 아예 딕셔너리에 4가지 방향에 따른 값을 0:[(r증감, c증감, 회전 후 방향), ... (r증감, c증감, 회전 후 방향)], ...
와 같이 저장해놨다.
그 후 문제에서 명세한 순서대로 코드를 구현한다.
n, m = map(int, input().split())
r, c, d = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(n)]
direction = {0:[(0, -1, 3), (1, 0, 2), (0, 1, 1), (-1, 0, 0)], \
1:[(-1, 0, 0), (0, -1, 3), (1, 0, 2), (0, 1, 1)], \
2:[(0, 1, 1), (-1, 0, 0), (0, -1, 3), (1, 0, 2)], \
3:[(1, 0, 2), (0, 1, 1), (-1, 0, 0), (0, -1, 3)]}
cnt = 0
while True:
if board[r][c] == 0:
cnt += 1
board[r][c] = -1
for nxt in direction[d]:
rr, cc, d = r+nxt[0], c+nxt[1], nxt[2]
if board[rr][cc] == 0:
r, c = rr, cc
break
else:
br, bc = r+direction[d][1][0], c+direction[d][1][1]
if board[br][bc] == 1: break
else: r, c = br, bc
print(cnt)
구현 문제는 난이도와 무관하게 항상 시간이 오래걸리고 있다. 특히 문제에서 요구하는 바와 입력값을 명확히 이해할 필요가 있다.