문제 출처 : www.acmicpc.net/problem/17144
문제 해석 : 공기청정기는 여러 규칙에 따라서 움직인다. 이를 수행했을 때 T초 후의 총 먼지의 양을 구하라
문제 풀이 : 주어진 요구사항을 차근차근 하나씩 확인해 가면서 구현하면 풀 수 있다.
풀이 코드
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
def check_all():
temp = 0
for i in range(R):
temp += sum(arr[i])
return temp +2
def spread():
temp = [[0] * C for _ in range(R)]
for i in range(R):
for j in range(C):
if arr[i][j] == -1:
continue
else:
x, y = i, j
amount = arr[x][y]//5
last = arr[x][y]
for k in range(4):
nx, ny = x + dx[k], y + dy[k]
if 0 <= nx < R and 0 <= ny < C:
if arr[nx][ny] != -1:
temp[nx][ny] += amount
last -= amount
temp[x][y] += last
temp[air_conditional[0]][0] = -1
temp[air_conditional[1]][0] = -1
return temp
def clean_air(arr):
up = air_conditional[0]
down = air_conditional[1]
# 1열 위쪽 아래로 내리기
for i in range(up-1, 0, -1):
arr[i][0] = arr[i-1][0]
arr[0][0] = 0
# 1열 아래쪽 위로 올리기
for i in range(down+2, R):
arr[i-1][0] = arr[i][0]
arr[R-1][0] = 0
#왼쪽으로 이동
for i in range(0, C-1):
arr[0][i] = arr[0][i+1]
arr[R-1][i] = arr[R-1][i+1]
arr[0][C-1] = 0
arr[R-1][C-1] = 0
# R열 위쪽 위로
for i in range(0, up):
arr[i][C-1] = arr[i+1][C-1]
arr[up][C-1] = 0
# R열 아래쪽 아래로
for i in range(R-1, down, -1):
arr[i][C-1] = arr[i-1][C-1]
arr[down][C-1] =0
#오른쪽으로 이동
for i in range(C-1, 1, -1):
arr[up][i] = arr[up][i-1]
arr[down][i] = arr[down][i-1]
arr[up][1] = 0
arr[down][1] = 0
R, C, T = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(R)]
time = 0
air_conditional = []
for i in range(R):
if arr[i][0] == -1:
air_conditional.append(i)
while time < T:
arr = spread()
clean_air(arr)
time += 1
answer = check_all()
print(answer)
author : donghak park
contact : donghark03@naver.com
## 문제의 저작권은 백준 알고리즘 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.
'📊알고리즘, 문제풀이 > 📈문제풀이 (PS)' 카테고리의 다른 글
[알고리즘][Python] 백준 14889 스타트와 링크 문제 풀이 (0) | 2021.02.09 |
---|---|
[알고리즘][Python] 백준 14503 로봇 청소기 문제 풀이 (0) | 2021.02.08 |
[알고리즘][Python] 백준 16953 A-->B 문제 풀이 (0) | 2021.02.01 |
[알고리즘][Python] 백준 15666 N과 M (12) 문제 풀이 (0) | 2021.01.31 |
[알고리즘][Python] 백준 15663 N과 M (9) 문제 풀이 (0) | 2021.01.30 |