티스토리 뷰
반응형
https://www.acmicpc.net/problem/3190
3190번: 뱀
'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임
www.acmicpc.net

⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력


⊙ 알고리즘 분류
- 구현
- 자료 구조
- 시뮬레이션
- 덱
- 큐
⊙ 문제 접근 과정
뱀의 머리와 꼬리를 알기 위해서 큐를 사용한다.
아래에 왜 큐를 사용해야 하는지 설명하겠다.
만약 다음 칸에 사과가 있다면 뱀의 길이는 증가한다.
사과가 존재하지 않으면 뱀의 길이는 유지된다.
그렇다는 말은 사과가 존재하면 뱀의 꼬리는 움직이지 않고,
사과가 존재하지 않으면 꼬리는 움직여야 한다.
꼬리가 움직여야 하는 좌표를 알아야 하기에 큐를 사용한다.
해당 움직임을 한번씩 할 때마다 count up을 해주면 된다.
범위를 벗어나거나 자신의 몸을 만나면 게임은 종료된다.
⊙ 문제 풀이
import sys
from collections import deque
input = sys.stdin.readline
N = int(input())
arr = [[0] * N for _ in range(N)]
direction = {0: (0, 1), 1: (1, 0), 2: (0, -1), 3: (-1, 0)}
q = deque()
time = deque()
K = int(input())
for i in range(K):
x, y = map(int, input().split())
arr[x-1][y-1] = 1
L = int(input())
for i in range(L):
X, C = input().split()
time.append([int(X), C])
def Dummy():
d = 0
count = 0
nx, ny = 0, 0
q.append((nx, ny))
arr[nx][ny] = 4
while True:
count += 1
nx = nx + direction[d][0]
ny = ny + direction[d][1]
if not 0 <= nx < N or not 0 <= ny < N:
break
if arr[nx][ny] == 1:
arr[nx][ny] = 4
q.append((nx, ny))
elif arr[nx][ny] == 0:
arr[nx][ny] = 4
q.append((nx, ny))
delX, delY = q.popleft()
arr[delX][delY] = 0
elif arr[nx][ny] == 4:
break
if len(time) and time[0][0] == count:
t, nd = time.popleft()
if nd == 'L':
d = (d + 3) % 4
elif nd == 'D':
d = (d + 1) % 4
return count
print(Dummy())
⊙ 결과

⊙ 마무리
NONE
좋아요는 로그인하지 않아도 누를 수 있습니다!
728x90
반응형
'백준 온라인 저지 [BOJ] > PYTHON [파이썬]' 카테고리의 다른 글
[백준(BOJ)] 2623번 : 음악프로그램 - PYTHON[파이썬] (0) | 2021.11.16 |
---|---|
[백준(BOJ)] 1926번 : 그림 - PYTHON[파이썬] (0) | 2021.11.16 |
[백준(BOJ)] 1476번 : 날짜 계산 - PYTHON[파이썬] (0) | 2021.11.07 |
[백준(BOJ)] 14499번 : 주사위 굴리기 - PYTHON[파이썬] (0) | 2021.11.07 |
[백준(BOJ)] 2583번 : 영역 구하기 - PYTHON[파이썬] (0) | 2021.10.28 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 풀이
- 정리
- 알고리즘
- 구현
- 그리디
- 정답
- 프로그래머스
- 쉽게 배우는 자바 프로그래밍
- C++
- 자바스크립트
- Web
- 연습문제
- 쉽게배우는자바프로그래밍
- 우종정
- 운영체제
- JS
- 쉽게배우는
- 파이썬
- BFS
- 해답
- OS
- 정렬
- CPP
- py
- 백준
- java
- 문자열
- Python
- 답
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함