[코드트리] 시공의 돌풍 (python)
🔗 문제 링크
https://www.codetree.ai/frequent-problems/heros-of-storm/description
https://www.acmicpc.net/problem/17144 (백준 - 미세먼지 안녕!)
👩🏻💻 코드
import sys
n, m, t = map(int, sys.stdin.readline().rstrip().split())
maps = [list(map(int, sys.stdin.readline().rstrip().split())) for _ in range(n)]
answer = 0
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def spread():
next_maps = [[0] * m for _ in range(n)]
for i in range(n):
for j in range(m):
if maps[i][j] == -1:
continue
mod = maps[i][j] // 5
cnt = 0
for k in range(4):
nx = i + dx[k]
ny = j + dy[k]
if 0 <= nx < n and 0 <= ny < m and maps[nx][ny] != -1:
next_maps[nx][ny] += mod
cnt += 1
next_maps[i][j] += maps[i][j] - mod * cnt
for i in range(n):
for j in range(m):
if maps[i][j] != -1:
maps[i][j] = next_maps[i][j]
def rotate_top(start):
for i in range(start - 1, 0, -1):
maps[i][0] = maps[i - 1][0]
for j in range(m - 1):
maps[0][j] = maps[0][j + 1]
for i in range(0, start):
maps[i][m - 1] = maps[i + 1][m - 1]
for j in range(m - 1, 0, -1):
if j == 1:
maps[start][j] = 0
else:
maps[start][j] = maps[start][j - 1]
def rotate_bottom(start):
for i in range(start + 1, n - 1):
maps[i][0] = maps[i + 1][0]
for j in range(m - 1):
maps[n - 1][j] = maps[n - 1][j + 1]
for i in range(n - 1, start, -1):
maps[i][m - 1] = maps[i - 1][m - 1]
for j in range(m - 1, 0, -1):
if j == 1:
maps[start][j] = 0
else:
maps[start][j] = maps[start][j - 1]
tornado = 0
for row in range(n):
if maps[row][0] == -1:
tornado = row
break
for i in range(t):
spread()
rotate_top(tornado)
rotate_bottom(tornado + 1)
for i in range(n):
for j in range(m):
if maps[i][j] != -1:
answer += maps[i][j]
print(answer)
📝 정리
- 시공의 돌풍이 있는 위치 구하기
- 확산 계산하기
2-1. (0,0)부터 (n-1, m-1)까지 확산 결과를 next_maps에 저장
2-2. next_maps를 maps에 저장 - 위쪽, 아래쪽 rotate 시키기
- 시공의 돌풍이 있는 자리를 뺀 나머지 값 answer에 더하기
💡기억해야 할 것
rotate_top,rotate_bottom에서서 범위를 잘못 설정해서 잘못된 부분찾는 데 한참 걸렸다.
범위 설정할 때는 꼼꼼히 확인하자.
Author And Source
이 문제에 관하여([코드트리] 시공의 돌풍 (python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hammii/코드트리-시공의-돌풍-python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)