https://www.acmicpc.net/problem/3190
접근
생각보다 직관적으로 접근해서 풀 수 있었던 문제였던 것 같다.
뱀을 주어진 방향으로 한칸 이동시키는 move 함수(벽을 만나거나, 뱀의 몸체에 부딪힐 경우 실패, 사과를 만날 경우 뱀의 길이를 늘리는 코드 포함), 뱀의 방향 전환을 포함하여 뱀이 이동하는 시간을 기록하는 solve 함수를 이용하여 답을 도출할 수 있었다.
코드
from collections import deque
N = int(input())
board = [[0] * N for _ in range(N)]
K = int(input())
for _ in range(K):
r, c = map(int, input().split())
board[r - 1][c - 1] = 1
L = int(input())
turn = []
for _ in range(L):
X, C = input().split()
turn.append((int(X), C))
rc = [0, 1, 0, -1]
cc = [1, 0, -1, 0]
snake = deque([(0, 0)])
board[0][0] = 2
def move(di):
nr, nc = snake[-1][0] + rc[di], snake[-1][1] + cc[di]
if not (0 <= nr < N and 0 <= nc < N):
return 0
elif board[nr][nc] == 2:
return 0
elif board[nr][nc] == 1:
snake.append((nr, nc))
board[nr][nc] = 2
else:
snake.append((nr, nc))
board[nr][nc] = 2
dr, dc = snake.popleft()
board[dr][dc] = 0
return 1
def solve():
time = 0
res = 1
di = 0
turn_time = 0
while res:
res = move(di)
time += 1
if turn_time == len(turn):
pass
elif time == turn[turn_time][0]:
if turn[turn_time][1] == "D":
di += 1
else:
di -= 1
di %= 4
turn_time += 1
print(time)
solve()
더 생각해 볼 것?
...
코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!
반응형
'코딩 > 백준 (Python)' 카테고리의 다른 글
백준 14501번: 퇴사 (Python) (0) | 2022.02.19 |
---|---|
백준 14500번: 테트로미노 (Python) (0) | 2022.02.06 |
백준 12100번: 2048 (Easy) (Python) (0) | 2022.02.03 |
백준 13460번: 구슬 탈출2 (Python) (0) | 2022.02.03 |
백준 3977번: 축구 전술 (Python) (0) | 2021.07.11 |
최근댓글