https://www.acmicpc.net/problem/17144
내 풀이:
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
|
def go():
global R, C, arr, up, down
new = [[0] * C for _ in range(R)]
for y in range(R):
for x in range(C):
if arr[y][x] >= 5:
val = (arr[y][x] // 5)
for dy, dx in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
ny, nx = y + dy, x + dx
if 0 <= ny <= R-1 and 0 <= nx <= C-1 and (ny, nx) not in [(up, 0), (down, 0)]:
new[ny][nx] += val
arr[y][x] -= val
new[y][x] += arr[y][x]
else:
new[y][x] += arr[y][x]
arr = new
def clean(up, down):
global R, C
for i in range(up-1, 0, -1):
arr[i][0] = arr[i-1][0]
for j in range(C-1):
arr[0][j] = arr[0][j+1]
for i in range(up):
arr[i][C-1] = arr[i+1][C-1]
for j in range(C-1, 0, -1):
arr[up][j] = arr[up][j-1]
for i in range(down+1, R-1):
arr[i][0] = arr[i+1][0]
for j in range(C-1):
arr[R-1][j] = arr[R-1][j+1]
for i in range(R-1, down, -1):
arr[i][C-1] = arr[i-1][C-1]
for j in range(C-1, 0, -1):
arr[down][j] = arr[down][j-1]
R, C, T = map(int,input().split())
arr = [list(map(int,input().split())) for _ in range(R)]
for i in range(R):
if arr[i][0] == -1:
up = i
break
down = up+1
arr[up][0] = 0
arr[down][0] = 0
for t in range(T):
go()
clean(up, down)
ans = 0
for i in range(R):
for j in range(C):
ans += arr[i][j]
print(ans)
|
PyPy3, 1256ms
Python3로는 시간 초과가 나서 PyPy3으로 제출하여 정답처리를 받았다. Python3로 정답처리를 받으려면 더 최적화시켜야 할 것 같다. 모듈을 이용하지 않고 더 최적화가 가능할지는 잘 모르겠다.
SWEA [모의 SW 역량테스트] 벽돌 깨기 (0) | 2020.02.18 |
---|---|
파이썬으로 풀어보는 백준 17837번: 새로운 게임 2 (삼성 A형 기출 문제) (0) | 2020.02.16 |
파이썬으로 풀어보는 백준 14502번: 연구소 (삼성 A형 기출 문제) (0) | 2020.02.15 |
파이썬으로 풀어보는 백준 14500번: 테트로미노 (삼성 A형 기출 문제) (0) | 2020.02.14 |
파이썬으로 풀어보는 백준 14890번: 경사로 (삼성 A형 기출 문제) (0) | 2020.02.13 |
댓글 영역