[BOJ] Q3190 뱀
[BOJ] Q3190 뱀
Question
Language: Python
Difficulty: Gold 4
뱀은 지도 내를 돌아다니면서 사과를 먹으면 자기의 몸길이가 커지게 되고, 벽이나, 자기 몸에 부딛히게 되면 게임은 종료하게 된다. 또한, 한 번씩 방향을 전환을 하기도 한다.
뱀이 있는 위치를 기록하기 위해 list에 뱀이 차지하고 있는 좌표들을 기록하며, index=0 을 꼬리로, index=1을 head으로 생각해서 주어진 조건에 따라 시뮬레이션을 진행하면 된다.
Solution
def rotate(direction,way):
if way=="L":
direction-=1
if direction==-1:
direction=3
else:
direction+=1
if direction == 4:
direction=0
return direction
def solution():
graph=[[0]* (n+1) for _ in range(n+1)]
dy=[-1,0,1,0]
dx=[0,1,0,-1]
direction=1
snale=[(1,1)]
for row,col in apples:
graph[row][col]=1
time=0
turn_index=0
while True:
head_row,head_col=snale[-1]
new_row=head_row+dy[direction]
new_col=head_col+dx[direction]
if new_row < 1 or new_row >n or new_col < 1 or new_col >n:
break
if (new_row,new_col) in snale:
break
snale.append((new_row,new_col))
if graph[new_row][new_col]==1:
graph[new_row][new_col]=0
else:
snale.pop(0)
time+=1
if turn_index < L and turns[turn_index][0]==time:
direction=rotate(direction,turns[turn_index][1])
turn_index+=1
return time+1
if __name__ == "__main__":
n=int(input())
k=int(input())
apples=[list(map(int,input().split())) for _ in range(k)]
L=int(input())
turns=[]
for _ in range(L):
time,rotation=input().split()
turns.append((int(time),rotation))
print(solution())
댓글남기기