https://www.acmicpc.net/problem/3190
Solution
from collections import deque
# 동남서북
dx = [1, 0, -1, 0] # r
dy = [0, 1, 0, -1] # c
def dummy(board, change_dir):
snake_head = (1,1)
direction = 0
time = 0
board[snake_head[0]][snake_head[1]] = 2
# (c, r)
q = deque()
q.append(snake_head)
while True:
#print(q, time, direction)
nx = snake_head[1] + dx[direction]
ny = snake_head[0] + dy[direction]
if nx >= 1 and ny >= 1 and nx <= n and ny <= n and board[ny][nx] != 2:
# 사과가 없을 경우
if board[ny][nx] == 0:
snake_head = (ny, nx)
board[ny][nx] = 2
q.append(snake_head)
y,x = q.popleft()
board[y][x] = 0
# 사과가 있을 경우
else:
snake_head = (ny, nx)
board[ny][nx] = 2
q.append(snake_head)
time += 1
for i in change_dir:
if time == i[0]:
direction = turn(direction, i[1])
else:
print(time+1)
break
def turn(direction, c):
if c == 'L':
direction = (direction - 1) % 4
else:
direction = (direction + 1) % 4
return direction
n = int(input())
k = int(input())
# (c, r)
apple = []
for i in range(k):
input_data = list(map(int, input().split(' ')))
apple.append(input_data)
l = int(input())
change_dir = []
for i in range(l):
input_data = input().split(' ')
change_dir.append((int(input_data[0]), input_data[1]))
board = [[0 for i in range(n+1)] for i in range(n+1)]
for i in range(n+1):
for j in range(n+1):
if [i, j] in apple:
board[i][j] = 1
dummy(board, change_dir)
구현 문제.
snake_head로 뱀의 머리의 좌표를 담아두고, 큐를 하나 만들어 board에 있는 뱀의 전체 몸 위치를 관리한다. 뱀이 움직였을 때 사과가 있을 때에는 큐에 뱀의 머리 부분을 담고, board에 뱀이 있다는 표시를 해둔다.
# 사과가 있을 경우
else:
snake_head = (ny, nx)
board[ny][nx] = 2
q.append(snake_head)
사과가 없을 경우에는 사과가 있을 경우와 같지만, 뱀의 몸길이가 짧아지므로 큐에서 가장 처음에 들어왔던 부분을 제거해주고 board에 뱀이 있다는 표시인 2를 다시 0으로 바꿔준다.
# 사과가 없을 경우
if board[ny][nx] == 0:
snake_head = (ny, nx)
board[ny][nx] = 2
q.append(snake_head)
y,x = q.popleft()
board[y][x] = 0
그리고 시간을 1초씩 증가를 시키는데, 방향 전환을 해야될 때가 오면 turn함수에 현재 방향과 전환할 방향을 넘겨주고 방향을 바꾼다.
time += 1
for i in change_dir:
if time == i[0]:
direction = turn(direction, i[1])
'Algorithm > BOJ' 카테고리의 다른 글
[백준/Python] 15683번 감시 (0) | 2021.03.09 |
---|---|
[백준/Python] 14888번 연산자 끼워넣기 (0) | 2020.08.14 |
[백준/Python] 16236번 아기 상어 (0) | 2020.06.29 |
[백준/Python] 14503번 로봇 청소기 (0) | 2020.04.20 |
[백준/Python] 2178번 미로 탐색 (0) | 2020.04.19 |
,