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 |
Tags
- 파이썬
- SWEA
- test-helper
- 1단계
- Python
- 모두를 위한 딥러닝 강좌 시즌1
- 프로그래머스
- AWS
- 2단계
- docker
- 이것이 코딩테스트다 with 파이썬
- 딥러닝
- 실전알고리즘
- cs
- 백준
- 그리디
- ubuntu
- CS231n
- STL
- 자료구조 및 실습
- 3단계
- pytorch
- ssd
- MySQL
- C++
- Object detection
- 구현
- 머신러닝
- 전산기초
- 코드수행
Archives
- Today
- Total
곰퓨타의 SW 이야기
[백준 12100 2048(easy)] 하나하나 차근차근 풀어보기,, 본문
해결해야하는 문제는 다음과 같았다.
12100번: 2048 (Easy)
첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2
www.acmicpc.net
다음과 같은 방식으로 접근하였다.
우선, 너무 더럽게 푼 것 같지만, 다음과 같은 방식으로 접근하였다.
import sys
input = sys.stdin.readline
n = int(input())
game = []
for i in range(n):
game.append(list(map(int,input().split())))
def found_max(game_map):
max_num=0
for i in range(n):
if max_num < max(game_map[i]) :
max_num = max(game_map[i])
return max_num
def go_left(count,old_map) :
new_map = [[0 for _ in range(n)] for _ in range(n)]
if count > 5:
return found_max(old_map)
for i in range(n):
temp = 0
flag = 0
new_map_j = 0
for j in range(n):
if temp == 0 or old_map[i][j] == 0 :
if old_map[i][j] != 0 :
temp = old_map[i][j]
continue
if flag == 0:
if temp == old_map[i][j] :
new_map[i][new_map_j] = temp*2
flag = 1
else :
new_map[i][new_map_j] = temp
# 다음 값은 다음에 저장되도록
new_map_j += 1
temp = old_map[i][j]
else:
temp = old_map[i][j]
flag = 0
if flag == 0 and temp != 0:
new_map[i][new_map_j] = temp
return go_everywhere(count+1,new_map)
def go_right(count, old_map) :
new_map = [[0 for _ in range(n)] for _ in range(n)]
if count > 5:
return found_max(old_map)
for i in range(n):
temp = 0
flag = 0
new_map_j = n-1
for j in range(n-1,-1,-1):
if temp == 0 or old_map[i][j] == 0:
if old_map[i][j] != 0 :
temp = old_map[i][j]
continue
if flag == 0:
if temp == old_map[i][j] :
new_map[i][new_map_j] = temp*2
flag = 1
else :
new_map[i][new_map_j] = temp
# 다음 값은 다음에 저장되도록
new_map_j -= 1
temp = old_map[i][j]
else:
temp = old_map[i][j]
flag = 0
if flag == 0 and temp != 0:
new_map[i][new_map_j] = temp
return go_everywhere(count+1,new_map)
def go_up(count, old_map) :
new_map = [[0 for _ in range(n)] for _ in range(n)]
if count > 5:
return found_max(old_map)
for i in range(n):
temp = 0
flag = 0
new_map_j = 0
for j in range(n):
if temp == 0 or old_map[j][i] == 0:
if old_map[j][i] != 0 :
temp = old_map[j][i]
continue
if flag == 0:
if temp == old_map[j][i] :
new_map[new_map_j][i] = temp*2
flag = 1
else :
new_map[new_map_j][i] = temp
# 다음 값은 다음에 저장되도록
new_map_j += 1
temp = old_map[j][i]
else:
temp = old_map[j][i]
flag = 0
if flag == 0 and temp != 0:
new_map[new_map_j][i] = temp
return go_everywhere(count+1,new_map)
def go_down(count,old_map):
new_map = [[0 for _ in range(n)] for _ in range(n)]
if count > 5:
return found_max(old_map)
for i in range(n):
temp = 0
flag = 0
new_map_j = n-1
for j in range(n-1,-1,-1):
if temp == 0 or old_map[j][i] == 0:
if old_map[j][i] != 0 :
temp = old_map[j][i]
continue
if flag == 0:
if temp == old_map[j][i] :
new_map[new_map_j][i] = temp*2
flag = 1
else :
new_map[new_map_j][i] = temp
# 다음 값은 다음에 저장되도록
new_map_j -= 1
temp = old_map[j][i]
else:
temp = old_map[j][i]
flag = 0
if flag == 0 and temp != 0:
new_map[new_map_j][i] = temp
return go_everywhere(count+1,new_map)
dp = []
def go_everywhere(count,old_map):
dp.append(max(go_left(count,old_map),go_right(count,old_map),go_up(count,old_map),go_down(count,old_map)))
return max(dp)
print(go_everywhere(1,game))
'TIL > 백준' 카테고리의 다른 글
[백준 9375번 패션왕 신해빈] 딕셔너리 활용 (0) | 2021.06.29 |
---|---|
[백준 13458번 시험감독] if,for 의 활용 (0) | 2021.04.24 |
[백준 14499번 주사위굴리기] 경우의 수 차근차근 따지기 (0) | 2021.04.24 |
[백준 5585 거스름돈] 그리디 알고리즘 활용하기 (0) | 2021.04.15 |
[백준 1759 암호 만들기] 조건 주의하기 (0) | 2021.04.15 |
Comments