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
- 음성 합성
- 보코더
- waveglow
- 한국어 음성 합성
- 딥러닝 보코더
- 노래합성
- korean tts
- you only look once
- 트레이닝
- singing voice synthesis
- text-to-speech
- melgan
- 윈도우
- 딥러닝
- 딥러닝 음성 합성
- deep voice
- 타코트론
- 학습
- YOLO
- tacotron
- Vocoder
- DCTTS
- 한국어 tts
- TTS
Archives
- Today
- Total
chldkato
백준 3190 뱀 (파이썬) 본문
https://www.acmicpc.net/problem/3190
1. 리스트 rotate에 몇 초에 어느방향으로 회전할 지 저장한다
2. roate 안에 명령을 하나씩 꺼내서 이동한다
뱀이 이동을 시작한 시간이 기준이기 때문에 rotate에서 꺼낸 시간을 이전에 꺼낸 시간을 빼준 만큼 이동한다
bt는 rotate 함수의 이전 시간, snake 리스트는 뱀의 위치, head와 tail은 뱀의 머리와 꼬리 좌표다
3. 이동할 때 범위를 벗어나거나 뱀의 몸과 마주치면 이동 시간 + 1을 출력하고 종료한다
4. 뱀을 다음칸으로 이동시키고 머리 좌표를 갱신한다
이 때 snake 리스트는 꼬리 좌표 갱신을 위해 이전 좌표 값에 + 1을 한다
5. 사과가 있으면 사과를 먹고 0으로 바꿔준다
6. 사과가 없으면 현재 꼬리 좌표를 불러와서 상하좌우에 차이값이 1인 좌표를 찾는다
현재 꼬리 좌표는 0으로 바꿔주고 tail을 다음 꼬리 좌표로 갱신한다
7. 직선 이동을 마치면 회전을 해서 dir을 갱신한다
import sys
input = sys.stdin.readline
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
def move(x, y, t, r):
global ans, dir, head, tail
for i in range(t):
nx = x + dx[dir]
ny = y + dy[dir]
if not 0 <= nx < n or not 0 <= ny < n:
return 1
if snake[nx][ny]:
return 1
snake[nx][ny] = snake[x][y] + 1
head = [nx, ny]
if a[nx][ny] == 1:
a[nx][ny] = 0
else:
tx, ty = tail
for j in range(4):
ntx = tx + dx[j]
nty = ty + dy[j]
if not 0 <= ntx < n or not 0 <= nty < n:
continue
if snake[ntx][nty] - snake[tx][ty] == 1:
snake[tx][ty] = 0
tail = [ntx, nty]
break
x, y = nx, ny
ans += 1
dir = (dir + 1) % 4 if r == 'D' else (dir + 3) % 4
n = int(input())
k = int(input())
a = [[0 for _ in range(n)] for _ in range(n)]
for _ in range(k):
x, y = map(int, input().split())
a[x-1][y-1] = 1
rotate = []
l = int(input())
for _ in range(l):
x, c = list(input().split())
rotate.append([x, c])
bt, ans, dir, flag = 0, 0, 0, 0
snake = [[0 for _ in range(n)] for _ in range(n)]
snake[0][0] = 1
head, tail = [0, 0], [0, 0]
for t, r in rotate:
nt = int(t) - bt
res = move(head[0], head[1], nt, r)
if res:
print(ans+1)
flag = 1
break
bt = int(t)
if flag == 0:
move(head[0], head[1], n, r)
print(ans+1)
'백준' 카테고리의 다른 글
백준 16637 괄호 추가하기 (파이썬) (0) | 2020.04.21 |
---|---|
백준 12100 2048 (Easy) (파이썬) (1) | 2020.04.19 |
백준 13458 시험 감독 (파이썬) (0) | 2020.04.19 |
백준 14499 주사위 굴리기 (파이썬) (0) | 2020.04.19 |
백준 14500 테트로미노 (파이썬) (0) | 2020.04.19 |
Comments