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
- tacotron
- text-to-speech
- 딥러닝 음성 합성
- 노래합성
- 딥러닝 보코더
- 딥러닝
- DCTTS
- 트레이닝
- YOLO
- 윈도우
- 학습
- singing voice synthesis
- 보코더
- TTS
- korean tts
- waveglow
- 타코트론
- you only look once
- 음성 합성
- Vocoder
- deep voice
- 한국어 음성 합성
- 한국어 tts
- melgan
Archives
- Today
- Total
chldkato
백준 17822 원판 돌리기 (파이썬) 본문
https://www.acmicpc.net/problem/17822
1. 원판 숫자의 총합을 nsum에 저장하고 개수를 nm에 저장한다
2. k를 m으로 나눈 나머지를 기준으로 원판 배열을 회전하고 방문 체크 배열 c도 같이 회전한다
3. 방문하지 않았던 숫자에 대해서 bfs를 수행한다
4. bfs로 이동하면서 y가 0보다 작으면 m-1, m-1보다 크면 0으로 바꿔서 원을 이루도록 한다
5. 다음 칸의 숫자가 같으면 체크하고 몇 개가 같은지 세는 xnct를 증가시킨다
6. return 값이 있으면 지운 숫자의 합만큼 nsum에서 빼주고 nm도 빼준다
지운 숫자가 있음을 알려주는 flag를 1로 저장한다
7. 만약 모든 숫자를 지웠으면 0을 출력하고 끝낸다
평균을 계산할 때 0으로 나누는 것을 방지할 수 있다
8. 지운 숫자가 없으면 문제의 조건대로 숫자를 바꾸고 nsum도 같이 빼거나 더해준다
9. 마지막에 nsum을 출력한다
from collections import deque
import sys
input = sys.stdin.readline
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
def bfs(x, y):
q.append([x, y])
xcnt = 0
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if ny < 0:
ny = m-1
elif ny > m-1:
ny = 0
if 0 <= nx < n and 0 <= ny < m and not c[nx][ny]:
if a[x][y] == a[nx][ny]:
c[nx][ny] = 1
q.append([nx, ny])
xcnt += 1
return xcnt
n, m, t = map(int, input().split())
a, nsum, nm = [], 0, n*m
for _ in range(n):
row = list(map(int, input().split()))
a.append(row)
nsum += sum(row)
q = deque()
c = [[0]*m for _ in range(n)]
for _ in range(t):
x, d, k = map(int, input().split())
k %= m
for i in range(x-1, n, x):
if d == 0:
a[i] = a[i][-k:] + a[i][:-k]
c[i] = c[i][-k:] + c[i][:-k]
else:
a[i] = a[i][k:] + a[i][:k]
c[i] = c[i][k:] + c[i][:k]
flag = 0
for i in range(n):
for j in range(m):
if not c[i][j]:
cnt = bfs(i, j)
if cnt:
nsum -= a[i][j] * cnt
nm -= cnt
flag = 1
if nm == 0:
print(0)
sys.exit()
if not flag:
avg = nsum / nm
for i in range(n):
for j in range(m):
if not c[i][j]:
if a[i][j] > avg:
a[i][j] -= 1
nsum -= 1
elif a[i][j] < avg:
a[i][j] += 1
nsum += 1
print(nsum)
'백준' 카테고리의 다른 글
백준 17141 연구소 2 (파이썬) (0) | 2020.03.07 |
---|---|
백준 17825 주사위 윷놀이 (파이썬) (0) | 2020.03.06 |
백준 17780 새로운 게임 (파이썬) (0) | 2020.03.06 |
백준 17837 새로운 게임 2 (파이썬) (0) | 2020.03.06 |
백준 17779 게리맨더링 2 (파이썬) (0) | 2020.03.05 |
Comments