https://www.acmicpc.net/problem/12100
내 풀이:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
def move(lst, arr):
global N
for dir in lst:
if dir == 0:
for j in range(N):
s = 0
cnt_i = 0
for i in range(N):
if arr[i][j] != 0:
if s != arr[i][j]:
pre = arr[i][j]
arr[i][j] = 0
arr[cnt_i][j] = pre
s = pre
cnt_i += 1
elif s == arr[i][j]:
arr[cnt_i - 1][j] = s * 2
arr[i][j] = 0
s = 0
elif dir == 2:
for j in range(N):
s = 0
cnt_i = N-1
for i in range(N-1, -1, -1):
if arr[i][j] != 0:
if s != arr[i][j]:
pre = arr[i][j]
arr[i][j] = 0
arr[cnt_i][j] = pre
s = pre
cnt_i -= 1
elif s == arr[i][j]:
arr[cnt_i + 1][j] = s * 2
arr[i][j] = 0
s = 0
elif dir == 1:
for i in range(N):
s = 0
cnt_j = N-1
for j in range(N-1, -1, -1):
if arr[i][j] != 0:
if s != arr[i][j]:
pre = arr[i][j]
arr[i][j] = 0
arr[i][cnt_j] = pre
s = pre
cnt_j -= 1
elif s == arr[i][j]:
arr[i][cnt_j + 1] = s * 2
arr[i][j] = 0
s = 0
elif dir == 3:
for i in range(N):
s = 0
cnt_j = 0
for j in range(N):
if arr[i][j] != 0:
if s != arr[i][j]:
pre = arr[i][j]
arr[i][j] = 0
arr[i][cnt_j] = pre
s = pre
cnt_j += 1
elif s == arr[i][j]:
arr[i][cnt_j - 1] = s * 2
arr[i][j] = 0
s = 0
def order(idx, lst):
global N, ans
if idx == 4:
arr = [arr_init[_][:] for _ in range(N)]
move(lst, arr)
result = 0
for i in range(N):
for j in range(N):
if arr[i][j] > result:
result = arr[i][j]
if ans < result:
ans = result
return
for i in range(4):
lst.append(i)
order(idx+1, lst)
lst.pop()
N = int(input())
arr_init = [list(map(int,input().split())) for _ in range(N)]
dy = [-1, 0, 1, 0]
dx = [0, 1, 0, -1]
ans = 0
for i in range(4):
order(0, [i])
print(ans)
|
Python3, 520ms
번호를 이동시키는 방향에 따라 몰리는 쪽부터 탐색해서 채워야 하기 때문에 상하좌우 4개의 방향에 대해 if문으로 코드를 짰다. 마지막 수를 s에 저장했다가 같은 수가 나오면 저장할 자리(cnt로 기억)에 2배 값을 넣는 것으로 문제를 해결했다. 코드 길이에 비해 복붙을 이용해서 코딩 시간은 생각보다 길지 않았던 문제이다.
파이썬으로 풀어보는 백준 15684번: 사다리 조작 (삼성 A형 기출 문제) (0) | 2020.02.13 |
---|---|
파이썬으로 풀어보는 백준 17142번: 연구소 3 (삼성 A형 기출 문제) (0) | 2020.02.11 |
파이썬으로 풀어보는 백준 15683번: 감시 (삼성 A형 기출 문제) (0) | 2020.02.10 |
파이썬으로 풀어보는 백준 16234번: 인구 이동 (삼성 A형 기출 문제) (0) | 2020.02.08 |
파이썬으로 풀어보는 백준 15686번 치킨 배달 (삼성 A형 기출 문제) (0) | 2020.02.08 |
댓글 영역