# Coding/# 백준
[백준 / 3190] 뱀 - Python
강현들
2021. 12. 23. 17:23
728x90
반응형
https://www.acmicpc.net/problem/3190
3190번: 뱀
'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임
www.acmicpc.net
<풀이>
뱀의 위치를 리트스에 저장한다. 다음 칸에 가게 된다면 맨 뒤 위치를 지우고, 다음 위치를 저장해서 길이를 유지한다.
만약 사과를 먹게 된다면 맨 뒤 위치를 지우지 않고, 다음 위치를 저장해서 길이를 늘린다.
만약 다음 위치가 벽이나(N을 넘어가거나 0보다 작아지는 경우), 뱀의 몸이라면(다음 위치가 body리스트 안에 있다면) 해당 이동을 멈추고 현재 시간을 출력한다.
<전체 코드>
import sys
N = int(sys.stdin.readline())
K = int(sys.stdin.readline())
apples = []
for i in range(K):
row, col = map(int, sys.stdin.readline().split())
apples.append([row-1, col-1])
L = int(sys.stdin.readline())
movement = []
for i in range(L):
X, C = sys.stdin.readline().split()
movement.append([int(X), C])
movement.append([0, 0])
# 1북, 2동, 3남, 4서
direction = 2
now_time = 0
move_index = 0
head_row = 0
head_col = 0
body = [[0, 0]]
while True:
now_time += 1
# 한 칸 이동
if direction == 1:
head_row -= 1
elif direction == 2:
head_col += 1
elif direction == 3:
head_row += 1
else:
head_col -= 1
# 이동칸이 벽인경우
if head_row < 0 or head_row >= N or head_col < 0 or head_col >= N:
break
# 이동칸이 몸인 경우
if [head_row, head_col] in body:
break
# 이동칸이 사과인 경우
if [head_row, head_col] in apples:
apples.remove([head_row, head_col])
body.insert(0, [head_row, head_col])
# 이동칸이 아무 것도 아닌 경우
else:
body.insert(0, [head_row, head_col])
body.pop()
if movement[move_index][0] == now_time:
if movement[move_index][1] == 'L':
direction -= 1
if direction < 1:
direction = 4
else:
direction += 1
if direction > 4:
direction = 1
move_index += 1
print(now_time)
728x90
반응형