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
- TTS
- korean tts
- YOLO
- 한국어 tts
- deep voice
- 트레이닝
- 딥러닝
- 한국어 음성 합성
- text-to-speech
- DCTTS
- tacotron
- waveglow
- you only look once
- 노래합성
- 음성 합성
- 보코더
- singing voice synthesis
- 타코트론
- Vocoder
- melgan
- 학습
- 딥러닝 음성 합성
- 딥러닝 보코더
- 윈도우
Archives
- Today
- Total
chldkato
백준 12100 2048 (Easy) (파이썬) 본문
https://www.acmicpc.net/problem/12100
12100번: 2048 (Easy)
첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2보다 크거나 같고, 1024보다 작거나 같은 2의 제곱꼴이다. 블록은 적어도 하나 주어진다.
www.acmicpc.net
1. dfs 중복순열로 회전 방향을 정한다. 회전할 때는 move 함수를 실행해서 바로 이동한다
temp_a에는 회전하기 전의 보드 상태가 저장되있고 회전하지 않으면 temp_a를 불러와서 지도를 초기화한다
2. move 함수는 입력 받은 방향에 따라서 한번에 이동한다. dir = 0~3은 각각 상하좌우 방향을 의미한다
3. 위로 이동할 경우 이동할 맨 끝 idx를 0으로 설정한다
4. 블럭이 있으면 조건대로 구현한다
a[idx][j]가 0이면 빈칸이기 이므로 옮기기만 한다. 나중에 합칠 수 있는지 확인해야 하기 때문에 idx는 변하지 않는다
a[idx][j]가 같은 값이면 합쳐서 두배를 만들고, 한 번 합친 블럭은 더 합칠 수 없으므로 idx를 증가시킨다
블럭이 있는데 다른 값이면 그 위에 쌓여야 하기 때문에 idx를 먼저 증가시키고 블럭을 옮긴다
다른 방향도 위와 같이 구현하면 된다
5. 5번 이동했으면 최대값을 갱신한다
import sys, copy
input = sys.stdin.readline
def move(dir):
if dir == 0:
for j in range(n):
idx = 0
for i in range(1, n):
if a[i][j]:
temp = a[i][j]
a[i][j] = 0
if a[idx][j] == 0:
a[idx][j] = temp
elif a[idx][j] == temp:
a[idx][j] = temp * 2
idx += 1
else:
idx += 1
a[idx][j] = temp
elif dir == 1:
for j in range(n):
idx = n-1
for i in range(n - 2, -1, -1):
if a[i][j]:
temp = a[i][j]
a[i][j] = 0
if a[idx][j] == 0:
a[idx][j] = temp
elif a[idx][j] == temp:
a[idx][j] = temp * 2
idx -= 1
else:
idx -= 1
a[idx][j] = temp
elif dir == 2:
for i in range(n):
idx = 0
for j in range(1, n):
if a[i][j]:
temp = a[i][j]
a[i][j] = 0
if a[i][idx] == 0:
a[i][idx] = temp
elif a[i][idx] == temp:
a[i][idx] = temp * 2
idx += 1
else:
idx += 1
a[i][idx] = temp
else:
for i in range(n):
idx = n-1
for j in range(n - 2, -1, -1):
if a[i][j]:
temp = a[i][j]
a[i][j] = 0
if a[i][idx] == 0:
a[i][idx] = temp
elif a[i][idx] == temp:
a[i][idx] = temp * 2
idx -= 1
else:
idx -= 1
a[i][idx] = temp
def dfs(cnt):
global a, ans
if cnt == 5:
for i in range(n):
for j in range(n):
ans = max(ans, a[i][j])
return
temp_a = copy.deepcopy(a)
for i in range(4):
move(i)
dfs(cnt + 1)
a = copy.deepcopy(temp_a)
n = int(input())
a = [list(map(int, input().split())) for _ in range(n)]
ans = 0
dfs(0)
print(ans)
'백준' 카테고리의 다른 글
백준 17070 파이프 옮기기 1 (파이썬) (0) | 2020.04.21 |
---|---|
백준 16637 괄호 추가하기 (파이썬) (0) | 2020.04.21 |
백준 3190 뱀 (파이썬) (0) | 2020.04.19 |
백준 13458 시험 감독 (파이썬) (0) | 2020.04.19 |
백준 14499 주사위 굴리기 (파이썬) (0) | 2020.04.19 |
Comments