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 |
Tags
- 딥러닝 음성 합성
- deep voice
- 트레이닝
- 딥러닝 보코더
- 음성 합성
- 노래합성
- text-to-speech
- melgan
- 윈도우
- 딥러닝
- 타코트론
- waveglow
- 한국어 음성 합성
- 학습
- YOLO
- korean tts
- 보코더
- Vocoder
- 한국어 tts
- TTS
- DCTTS
- singing voice synthesis
- tacotron
- you only look once
Archives
- Today
- Total
chldkato
백준 13460 구슬 탈출 2 (파이썬) 본문
https://www.acmicpc.net/problem/13460
13460번: 구슬 탈출 2
첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' 로 이루어져 있다. '.'은 빈 칸을 의미하고, '#'은 공이 이동할 수 없는 장애물 또는 벽을 의미하며, 'O'는 구멍의 위치를 의미한다. 'R'은 빨간 구슬의 위치, 'B'는 파란 구슬의 위치이다. 입력되는 모든 보드
www.acmicpc.net
1. 빨간 구슬과 파란 구슬을 기울인 방향에 대해서 갈 수 있는 만큼 이동했을 때의 좌표를 구한다
2. 중간에 파란 구슬이 구멍에 빠지면 continue하여 다른 방향으로 기울인 경우로 넘어간다
3. 빨간 구슬과 파란 구슬이 겹치면 각각 이동한 길이를 구하여 앞뒤로 위치하도록 처리한다
4. 빨간 구슬이 빠지면 기울인 횟수를 출력하고 10번이 넘어가면 -1 출력
from collections import deque
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
def bfs(rx, ry, bx, by, cnt):
q.append([rx, ry, bx, by])
c.append([rx, ry, bx, by])
while q:
qlen = len(q)
while qlen:
rx, ry, bx, by = q.popleft()
if a[rx][ry] == 'O':
print(cnt)
return
for i in range(4):
nrx, nry, nbx, nby = rx, ry, bx, by
while True:
nrx += dx[i]; nry += dy[i]
if a[nrx][nry] == 'O':
break
if a[nrx][nry] == '#':
nrx -= dx[i]; nry -= dy[i]
break
while True:
nbx += dx[i]; nby += dy[i]
if a[nbx][nby] == 'O':
break
if a[nbx][nby] == '#':
nbx -= dx[i]; nby -= dy[i]
break
if a[nbx][nby] == 'O':
continue
if nrx == nbx and nry == nby:
if abs(rx - nrx) + abs(ry - nry) > abs(bx - nbx) + abs(by - nby):
nrx -= dx[i]; nry -= dy[i]
else:
nbx -= dx[i]; nby -= dy[i]
if [nrx, nry, nbx, nby] not in c:
c.append([nrx, nry, nbx, nby])
q.append([nrx, nry, nbx, nby])
qlen -= 1
if cnt == 10:
print(-1)
return
cnt += 1
print(-1)
return
n, m = map(int, input().split())
a = [[] for _ in range(n)]
c, q, cnt = [], deque(), 0
for i in range(n):
a[i] = list(map(str, input()))
for j in range(m):
if a[i][j] == 'R':
rx, ry = i, j
a[i][j] = '.'
elif a[i][j] == 'B':
bx, by = i, j;
a[i][j] = '.'
bfs(rx, ry, bx, by, cnt)
'백준' 카테고리의 다른 글
백준 2206 벽 부수고 이동하기 (파이썬) (2) | 2020.02.16 |
---|---|
백준 2644 촌수계산 (파이썬) (0) | 2020.02.16 |
백준 10026 적록색약 (파이썬) (2) | 2020.02.16 |
백준 1697 숨바꼭질 (파이썬) (0) | 2020.02.16 |
백준 2468 안전 영역 (파이썬) (0) | 2020.02.16 |
Comments