티스토리 뷰
3190번: 뱀
'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임
www.acmicpc.net
POINT
뱀의 위치를 큐에 저장하자
- 뱀의 머리가 매번 움직이고, 꼬리는 사과를 먹으면 움직이지 않는다. → 움직일 때마다 머리 위치를 새로 저장한다.
- 사과를 먹지 못하면 꼬리도 움직여야 한다. → 움직이기 전의 꼬리 위치를 제거한다.
뱀의 방향 전환
- 방향에 따라 증가하는 좌표 값을 시계 방향으로 리스트에 설정해두고
- 오른쪽으로 회전할 땐 인덱스를 증가, 왼쪽으로 회전할 땐 인덱스를 감소시킨다.
- 동, 서, 남, 북 4가지 방향이므로, 4로 나눈 나머지를 구한다.
풀이
n = int(input()) # 보드 크기
graph = [[0] * (n+1) for _ in range(n+1)] # 보드 생성
k = int(input()) # 사과 개수
# 보드에 사과 위치 표시
for _ in range(k):
r, c = map(int, input().split())
graph[r][c] = 1
graph[1][1] = 2 # 뱀 시작 위치 표시
L = int(input()) # 뱀 방향 변환 횟수
data = [] # 방향 전환 정보
# 방향 변환 정보 저장
for _ in range(L):
x, c = input().split()
data.append((int(x), c))
# 우, 하, 좌, 상 (시계방향)
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
direction = 0 # 현재 방향
index = 0 # 다음 회전 정보
time = 0 # 지난 시간
x = y = 1 # 뱀 머리 위치
snake = [(x, y)] # 뱀 위치를 담은 리스트 (꼬리 -- 머리)
while True:
# 다음 위치
x += dx[direction]
y += dy[direction]
time += 1 # 시간 증가
# 벽이나 몸에 부딪히면
if (x < 1 or x > n or y < 1 or y > n) or graph[x][y] == 2:
print(time)
break
# 사과를 먹지 못하면 꼬리 이동
if graph[x][y] != 1:
r, c = snake.pop(0)
graph[r][c] = 0
graph[x][y] = 2 # 머리 위치 표시
snake.append((x, y)) # 뱀 머리 위치 저장
# 방향 설정
if index < L and time == data[index][0]:
# 오른쪽으로 회전
if data[index][1] == "D":
direction = (direction + 1) % 4
# 왼쪽으로 회전
elif data[index][1] == "L":
direction = (direction - 1) % 4
index += 1
[참고자료]
get — Python Reference (The Right Way) 0.1 documentation
Docs » get Edit on GitHub get Description Returns the value for key in the dictionary; if not found returns a default value. Syntax dict. get(key[, default]) key Required. A key in the dictionary. default Optional. Value that is returned when the key is n
python-reference.readthedocs.io
'🧩 알고리즘' 카테고리의 다른 글
[프로그래머스] 합승 택시 요금 - Python (0) | 2022.03.14 |
---|---|
[백준] 2638 치즈 - Python (0) | 2022.03.06 |
[백준] 2011번 암호코드 - Python (0) | 2022.03.02 |
[백준] 2210 숫자판 점프 - Python (0) | 2022.02.28 |
[백준] 2579 계단 오르기 - Python (0) | 2022.02.22 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코딩테스트
- p5js
- React.js
- javascript
- Spotify
- flutter
- backtracking
- python
- rn
- DP
- 백준
- React
- Unsplash
- 비동기
- 알고리즘
- nodeJS
- node.js
- 문제풀이
- 다이나믹프로그래밍
- 백트래킹
- 파이썬
- fetch
- 프로그래머스
- Python3
- 코어자바스크립트
- dfs
- 이벤트루프
- 코드분석
- 코테
- React-native
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함