https://www.acmicpc.net/problem/3190
완탐실시하였다.
방향이 전환될 때의 좌표와 방향을 Queue에 저장하는 것이 포인트.
Task Score
100%
def solve(MAP):
global N
curr_head_y = curr_head_x = 0
curr_tail_y = curr_tail_x = 0
curr_head_di = 0
curr_tail_di = 0
turn_point = []
time = 0
while True:
if time in dic.keys():
if dic[time] == "D":
curr_head_di = (curr_head_di+1)%4
else:
curr_head_di = (curr_head_di-1)%4
turn_point.append((curr_head_y, curr_head_x, curr_head_di))
next_head_y = curr_head_y + di[curr_head_di][0]
next_head_x = curr_head_x + di[curr_head_di][1]
if 0<=next_head_y<N and 0<=next_head_x<N:
if MAP[next_head_y][next_head_x] == 0:
if turn_point:
if (curr_tail_y, curr_tail_x) == turn_point[0][:2]:
hd = turn_point.pop(0)
curr_tail_di = hd[2]
MAP[next_head_y][next_head_x] = 1
MAP[curr_tail_y][curr_tail_x] = 0
curr_tail_y += di[curr_tail_di][0]
curr_tail_x += di[curr_tail_di][1]
elif MAP[next_head_y][next_head_x] == 1:
return time + 1
else:
MAP[next_head_y][next_head_x] = 1
curr_head_y = next_head_y
curr_head_x = next_head_x
time += 1
else:
return time + 1
# MAP 생성
N = int(input())
MAP = [[0]*N for _ in range(N)]
# 초기 뱀의 좌표 = 꼬리의 좌표
MAP[0][0] = 1
# MAP 에 사과 표시
for _ in range(int(input())):
y, x = map(int, input().split())
MAP[y-1][x-1] = 2
# 방향
di = ((0,1),(1,0),(0,-1),(-1,0))
# 시간 및 방향 입력
dic = dict()
for _ in range(int(input())):
t, d = input().split()
dic[int(t)] = d
print(solve(MAP))
문제를 푸는데 도움이 된 테스트 케이스
728x90
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[Python] 14499. 주사위 굴리기 (0) | 2021.04.07 |
---|---|
[Python] 13458. 시험 감독 (0) | 2021.04.04 |
[Python]3678. 카탄의 개척자 (0) | 2019.05.11 |
[Python]13460. 구슬 탈출 2 (0) | 2019.05.10 |
[Python]14502. 연구소 (0) | 2019.05.09 |
댓글