diff --git a/code_study/Baekjoon/python/17144.py b/code_study/Baekjoon/python/17144.py new file mode 100644 index 0000000..22a7d77 --- /dev/null +++ b/code_study/Baekjoon/python/17144.py @@ -0,0 +1,94 @@ +import sys +input = sys.stdin.readline + +def possible_diffusion(position_info: list[int]) -> bool : + nr, nc, R, C, air_purifier = position_info + return 0<=nr 0: + diffusion_amount = dust_map[r][c] // 5 + diffused_count = 0 + + for nr, nc in [(r+1, c), (r-1, c), (r, c+1), (r, c-1)] : + if possible_diffusion([nr, nc, R, C, air_purifier]): + temp_map[nr][nc] += diffusion_amount + diffused_count += 1 + + temp_map[r][c] += dust_map[r][c] - (diffusion_amount * diffused_count) + + temp_map[air_purifier][0] = -1 + temp_map[air_purifier+1][0] = -1 + + for i in range(R): + dust_map[i][:] = temp_map[i] + +def dust_purify(dust_map, map_info) -> int : + R, C, air_purifier = map_info + + purified_dust = 0 + + # anti clockwise purify + purified_dust += dust_map[air_purifier - 1][0] + + for r in range(air_purifier - 1, 0, -1): + dust_map[r][0] = dust_map[r - 1][0] + + for c in range(0, C - 1): + dust_map[0][c] = dust_map[0][c + 1] + + for r in range(0, air_purifier): + dust_map[r][C - 1] = dust_map[r + 1][C - 1] + + for c in range(C - 1, 1, -1): + dust_map[air_purifier][c] = dust_map[air_purifier][c - 1] + + dust_map[air_purifier][1] = 0 + + # clockwise purify + purified_dust += dust_map[air_purifier + 2][0] + + for r in range(air_purifier + 2, R - 1): + dust_map[r][0] = dust_map[r + 1][0] + + for c in range(0, C - 1): + dust_map[R - 1][c] = dust_map[R - 1][c + 1] + + for r in range(R - 1, air_purifier + 1, -1): + dust_map[r][C - 1] = dust_map[r - 1][C - 1] + + for c in range(C - 1, 1, -1): + dust_map[air_purifier + 1][c] = dust_map[air_purifier+ 1][c - 1] + + dust_map[air_purifier + 1][1] = 0 + + return purified_dust + +R, C, T = map(int, input().split()) + +dust_map: list[list[int]] = [] +air_purifier = -1 +find_air_purifier = False +total_dust = 0 + +for r in range(R) : + dust_map.append(list(map(int, input().split()))) + total_dust += sum(dust_map[r]) + if not find_air_purifier : + if dust_map[r][0] == -1 : + air_purifier = r + find_air_purifier = True + +total_dust += 2 +map_info = [R, C, air_purifier] + +for _ in range(T) : + dust_diffusion(dust_map, map_info) + total_dust -= dust_purify(dust_map, map_info) + +print(total_dust) \ No newline at end of file