문제
https://www.acmicpc.net/problem/17144
17144번: 미세먼지 안녕!
미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사
www.acmicpc.net
코드
r,c,t=map(int, input().split())
array=[list(map(int, input().split())) for _ in range(r)]
dx=[-1,1,0,0]
dy=[0,0,-1,1]
for i in range(r):
if array[i][0]==-1:
#ur: 청정기 위쪽 row
ur=i
dr=i+1
break
def spread():
# 동시에 확산되므로 temp 사용
temp = [[0]*c for _ in range(r)]
for i in range(r):
for j in range(c):
if array[i][j]!=0 and array[i][j]!=-1:
count=0
for k in range(4):
nx=i+dx[k]
ny=j+dy[k]
if 0<=nx<r and 0<=ny<c:
if array[nx][ny]!=-1:
temp[nx][ny]+=(array[i][j]//5)
count+=1
array[i][j]-=((array[i][j]//5)*count)
for i in range(r):
for j in range(c):
array[i][j]+=temp[i][j]
def work():
temp=array[ur][1]
for i in range(c-1):
temp,array[ur][i+1]=array[ur][i+1],temp
for i in range(ur,0,-1):
temp,array[i-1][c-1]=array[i-1][c-1],temp
for i in range(c-1,0,-1):
temp,array[0][i-1]=array[0][i-1],temp
for i in range(ur-1):
temp,array[i+1][0]=array[i+1][0],temp
array[ur][1]=0
temp = array[dr][1]
for i in range(c-1):
temp,array[dr][i+1]=array[dr][i+1],temp
for i in range(dr,r-1):
temp,array[i+1][c-1]=array[i+1][c-1],temp
for i in range(c-1,0,-1):
temp,array[r-1][i-1]=array[r-1][i-1],temp
for i in range(r-1,dr+1,-1):
temp,array[i-1][0]=array[i-1][0],temp
array[dr][1] = 0
for _ in range(t):
spread()
work()
result=0
for i in range(r):
for j in range(c):
if array[i][j]!=-1:
result+=array[i][j]
print(result)
생각 정리
def air_up():
dx = [0, -1, 0, 1]
dy = [1, 0, -1, 0]
direct = 0
before = 0
x, y = up, 1
while True:
nx = x + dx[direct]
ny = y + dy[direct]
if x == up and y == 0:
break
if nx < 0 or nx >= r or ny < 0 or ny >= c:
direct += 1
continue
arr[x][y], before = before, arr[x][y]
x = nx
y = ny
좀 더 깔끔하게 수정 가능
'문제풀이 > 구현' 카테고리의 다른 글
[파이썬] [구현] 백준 14890 경사로 (0) | 2023.04.07 |
---|---|
● [파이썬] [구현] 백준 17140 이차원 배열과 연산 (0) | 2023.03.31 |
● [파이썬] [구현] 백준 15685 드래곤 커브 (0) | 2023.03.28 |
○ [파이썬] [구현] 백준 15683 감시 (0) | 2023.03.27 |
○ [파이썬] [구현] 백준 14499 주사위 굴리기 (0) | 2023.03.25 |