반응형
https://www.acmicpc.net/problem/3190
3190번: 뱀
'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임
www.acmicpc.net
💡IDEA
조건에 맞게 구현하는 문제이다.
큐를 사용해서 뱀의 몸을 구현하고, 주어지는 방향에 맞게 위치를 틀어준다.
방향은 좌우로 움직이는 것을 고려하여 dir 배열을 사용하여 인덱스 값으로 방향을 조절했다.
가장 먼저 0행 0열부터 뱀이 오른쪽 방향으로 움직인다. 갈 수 있는 곳이라면 뱀의 몸에 추가해주고, 시간을 카운트한다. 만약 해당 위치에 사과가 있다면 사과가 없어지고 꼬리는 유지한다. 하지만 사과가 없다면 꼬리를 제거해야 한다.
방향 전환 정보에서 뽑아온 t 시간을 소모했을 때, 방향 d에 따라 방향을 움직이기 위해 L이라면 인덱스를 -1, R이라면 +1을 해준다. 이 때 4방향 밖에 없으므로 4로 나눈 나머지로 설정하여야 인덱스에러를 피한다. 인덱스를 갱신했다면 방향 전환 정보 또한 갱신하여준다.
뱀의 몸이 가는 길에 뱀의 몸을 만나면 안된다는 점도 주의한다.
결과값으로 카운트했던 시간을 출력한다.
📌CODE
import sys
input = sys.stdin.readline
from collections import deque
N = int(input())
K = int(input())
apple = [list(map(int, input().split())) for _ in range(K)]
L = int(input())
snake = deque([list(input().split()) for _ in range(L)])
dir = [(0, 1), (1, 0), (0, -1), (-1, 0)]
time = 0
path = deque([(0, 0)])
t, d = snake.popleft()
idx = 0
while 0<=path[-1][0]+dir[idx][0]<N and 0<=path[-1][1]+dir[idx][1]<N:
r = path[-1][0]+dir[idx][0]
c = path[-1][1]+dir[idx][1]
if (r, c) not in path:
path.append((r, c))
time += 1
if [r+1, c+1] in apple:
apple.remove([r+1, c+1])
else:
path.popleft()
if time == int(t):
if d == 'L':
idx = (idx-1) % 4
elif d == 'D':
idx = (idx+1) % 4
if snake:
t, d = snake.popleft()
else:
break
print(time+1)
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ][python] 16472. 고냥이 (1) | 2023.05.19 |
---|---|
[BOJ][python] 1068. 트리 (0) | 2022.09.04 |
[BOJ][python] 2302. 극장 좌석 (0) | 2022.09.03 |
[BOJ][python] 2529. 부등호 (0) | 2022.09.01 |
[BOJ][python] 16194. 카드 구매하기 2 (0) | 2022.08.31 |