https://www.acmicpc.net/problem/14503
문제 조건에 첫행,끝행,첫열,끝열은 모두 벽으로 막혀있다고 했으므로
next_r과 next_c가 이동할 수 있는지 확인할 필요 없다.
문제를 잘 읽어보면 알고리즘 구현의 힌트를 찾을 수 있다.
di = ((-1,0),(0,1),(1,0),(0,-1))
N, M = map(int, input().split())
r, c, d = map(int, input().split())
MAP = [list(map(int, input().split())) for _ in range(N)]
check = [[False]*M for _ in range(N)]
cnt = 0
while True:
check[r][c] = True
next_d = (d-1)%4
next_r = r + di[next_d][0]
next_c = c + di[next_d][1]
if MAP[next_r][next_c] == 0 and not check[next_r][next_c]:
d = next_d
r = next_r
c = next_c
cnt = 0
elif MAP[next_r][next_c] == 1 or check[next_r][next_c] and cnt != 4:
d = next_d
cnt += 1
if cnt == 4:
next_r = r - di[d][0]
next_c = c - di[d][1]
if MAP[next_r][next_c] == 0:
r = next_r
c = next_c
cnt = 0
else:
break
answer = 0
for r in range(N):
for c in range(M):
if check[r][c]:
answer += 1
print(answer)
문제를 푸는데 도움이 된 테스트 케이스
# Input 4 4 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 # Output 3 |
728x90
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[Python] 17142. 연구소 3 (0) | 2021.04.20 |
---|---|
[Python] 16235. 나무 재테크 (0) | 2021.04.15 |
[Python] 15686. 치킨 배달 (0) | 2021.04.08 |
[Python] 14499. 주사위 굴리기 (0) | 2021.04.07 |
[Python] 13458. 시험 감독 (0) | 2021.04.04 |
댓글