상세 컨텐츠

본문 제목

파이썬으로 풀어보는 백준 17144번: 미세먼지 안녕! (삼성 A형 기출 문제)

Python/문제풀이 (삼성 A형 대비)

by 코딩하는 낙타 2020. 2. 15. 19:31

본문

https://www.acmicpc.net/problem/17144

 

17144번: 미세먼지 안녕!

미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사과는 뛰어난 코딩 실력을 이용해 각 칸 (r, c)에 있는 미세먼지의 양을 실시간으로 모니터링하는 시스템을 개발했다. (r, c)는 r행 c열을 의미한다. 공기청정기는 항상 왼쪽 열에 설치되어 있고, 크기는 두 행을 차지한다. 공기청정기가 설치되어 있지 않은 칸에는 미세먼

www.acmicpc.net

 

내 풀이:

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 [(-10), (10), (0-1), (01)]:
                    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-10-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-10-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-10-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로 정답처리를 받으려면 더 최적화시켜야 할 것 같다. 모듈을 이용하지 않고 더 최적화가 가능할지는 잘 모르겠다.

 

관련글 더보기

댓글 영역