Recent Posts
Notice
No Rules Rules
뱀 (feat. 백준, 3190번) 본문
728x90
반응형
뱀
https://www.acmicpc.net/problem/3190
반응형
from collections import deque
def turn_direction(direction, where):
if where == 'L': # 현재에서 왼쪽
direction -= 1
if direction == -1:
direction = 3
elif where == 'D': # 현재에서 오른쪽
direction += 1
if direction == 4:
direction = 0
return direction
N = int(input())
arr = [[0] * (N + 1) for _ in range(N + 1)]
K = int(input())
for _ in range(K):
x, y = map(int, input().split())
arr[x][y] = 1
L = int(input())
tmp = []
for _ in range(L):
x, y = map(str, input().split())
x = int(x)
tmp.append([x, y])
POINT = dict()
for idx in range(len(tmp)):
POINT[tmp[idx][0]] = tmp[idx][1]
direction = 1 # 0,1,2,3 북,동,남,서
# 북 동 남 서
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
time_count = 0
q = deque()
# 뱀의 시작점
x, y = 1, 1
arr[x][y] = 2
q.append([x, y])
while True:
x += dx[direction]
y += dy[direction]
if 1<= x <= N and 1 <= y <= N and arr[x][y] != 2:
# 뱀 머리의 위치를 보관하고 해당 위치 값을 2로 변경
q.append([x,y])
arr[x][y] = 2
# 사과가 없으면 꼬리 부분 pop하고 해당 위치 값을 0으로 변경
if arr[x][y] == 0:
sx, sy = q.popleft()
arr[sx][sy] = 0
else:
time_count += 1
break;
time_count += 1
# 방향 회전해야 하는 경우
if time_count in POINT:
direction = turn_direction(direction, POINT[time_count])
print(time_count)
테두리에 대한 인덱싱만 고려한다면, 생각보다 쉬운 문제!
사과를 먹었거나 안먹었거나, 현재 뱀이 있는 x,y를 표시해주면 보다 간단하게 해결이 가능합니다.
728x90
반응형
'생활 > 코테' 카테고리의 다른 글
치킨 배달 (feat. 백준, 15686번) (0) | 2022.07.23 |
---|---|
기둥과 보 설치 (feat. 프로그래머스, 60061번) (0) | 2022.07.23 |
자물쇠와 열쇠 (feat. 프로그래머스, 60059번) (0) | 2022.07.23 |
실패율 (feat. 프로그래머스, 42889번) (0) | 2022.07.23 |
짝지어 제거하기 (feat. 프로그래머스, 12973번) (0) | 2022.07.23 |
Comments