Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 로또의 최고 순위와 최저 순위
- 124 나라의 숫자
- 프로그래머스
- 키패드 누르기
- 완주하지 못한 선수
- 인구 이동
- 백준
- 백준 2564
- 백준5710
- 백준16954
- 백준1788
- 백준1339
- 백준 14499
- 백준3190
- 파이썬
- 단어 수학
- 백준1697
- 움직이는 미로 탈출
- 경비원
- A와 B
- 백준2573
- 백준12904
- 전기 요금
- 빙산
- 코딩테스트
- 백준16234
- 부스트캠프
- 피보나치 수의 확장
- Smart Commit
- 소수 만들기
Archives
- Today
- Total
Today.dev
[BOJ_3190/Python] 뱀 본문
문제
풀이
from collections import deque
import sys
input = sys.stdin.readline
def turn(c):
global dir
if dir == 'L':
dir = 'D' if c == 'L' else 'U'
elif dir == 'R':
dir = 'U' if c == 'L' else 'D'
elif dir == 'U':
dir = 'L' if c == 'L' else 'R'
elif dir == 'D':
dir = 'R' if c == 'L' else 'L'
# 입력
N = int(input()) # 보드 크기
K = int(input()) # 사과 개수
apple = [tuple(map(int, input().split())) for _ in range(K)]
L = int(input()) # 뱀의 방향 전환 횟수(X초가 끝난 뒤 L(왼), D(오) 로 90도 회전함)
snake = [list(input().split()) for _ in range(L)]
# 풀이
route = deque() # TAIL ~ HEAD
route.append((1, 1)) # x, y
dir = 'R'
size = 0
while True:
x, y = route[-1]
# 1. 몸 길이 늘리기 # 현재 머리 위치 : (nx, ny)
size += 1
if dir == 'L':
nx, ny = x, y - 1
elif dir == 'R':
nx, ny = x, y + 1
elif dir == 'U':
nx, ny = x - 1, y
else:
nx, ny = x + 1, y
# 2. 종료 조건
if (nx, ny) in route or not (1 <= nx <= N and 1 <= ny <= N):
# 출력
print(size)
break
route.append((nx, ny))
# 3. 사과 유무
if (nx, ny) in apple:
apple.remove((nx, ny))
else:
route.popleft()
# 4. 방향 전환
if len(snake) != 0 and int(snake[0][0]) == size:
turn(snake[0][1])
del snake[0]
뱀의 양쪽을 늘리고 줄이고 해야하기 때문에 덱(deque)을 써야겠다는 생각을 했다.
그런데 문제에서 요구한 조건을 구현하는 것은 잘 했는데 문제에서 뱀이 맨 위 맨 좌측에 위치해 있다는 말을 보고 습관처럼 인덱스는 0 ~ N - 1까지, 뱀 위치는 (0, 0) 좌표 에서 시작하도록 세팅해서 1시간 헤맸다. 어쩐지 내 뱀은 사과 못 먹는데 다른 사람들 뱀은 사과 엄청 먹는거 보고 도대체 뭐가 문제지 싶었다. 정말.. 정말.. 머리 터지는줄 알았다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ_16954/Python] 움직이는 미로 탈출 (0) | 2021.07.05 |
---|---|
[BOJ_5710/Python] 전기 요금 (0) | 2021.07.05 |
[BOJ_1697/Python] 숨바꼭질 (0) | 2021.07.05 |
[BOJ_14499/Python] 주사위 굴리기 (0) | 2021.07.05 |
[BOJ_1339/Python] 단어 수학 (0) | 2021.05.31 |
Comments