티스토리 뷰
728x90
문제
문제가 요즘 날씨와 아쥬 어울린다 ,, 미세먼지 싫어 ,,,,, ㅠ
풀이 및 소스코드
확산이 동시에 진행된다는 점을 고려해야한다.
주석과 함께 코드를 보면 이해하기 쉬울거다 !
import sys
from copy import deepcopy
input = sys.stdin.readline
def airclear(x, y, diff): #공기청정기 작동
for i in range(4):
while True: #공기청정기의 오른쪽 값부터 시작해서 공기청정기를 만나면 종료한다.
nowx, nowy = x+dx[diff[i]], y+dy[diff[i]]
if 0<=nowx<c and 0<=nowy<r and a[nowy][nowx] == -1:
return
if 0<=nowx<c and 0<=nowy<r:
a[nowy][nowx] = arr[y][x]
else:
break
x, y = nowx, nowy
r, c, t = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(r)]
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
air = [] #공기청정기의 좌표가 들어갈 큐
for _ in range(t):
arr = [[0]*c for _ in range(r)] #동시에 확산이 이뤄지기때문에 확산을 시켜주는 동안 원래 미세먼지 값들이 변하면 안된다. 확산된 미세먼지 값들을 저장해줄 new 배열
for y in range(r): #확산 시작
for x in range(c):
if a[y][x] == 0:
continue
if a[y][x] == -1: #-1인 경우 공기청정기이므로, 좌표를 기록해준다.
arr[y][x] = -1
air.append([y,x])
continue
flg = 0
for j in range(4):#if문을 통과했다면 미세먼지가 있는 곳이기 때문에 상하좌우로 미세먼지가 퍼지도록 해준다.
nowx, nowy = x+dx[j], y+dy[j]
if 0<=nowx<c and 0<=nowy<r and a[nowy][nowx]!=-1:
arr[nowy][nowx] += a[y][x]//5
flg += 1
arr[y][x] += a[y][x] - a[y][x]//5*flg
a = deepcopy(arr) #a=arr 을 하게되면 주소값이 저장돼서 deepcopy를 사용해준다.
y, x = air.pop()
airclear(x+1, y, [0, 2, 1, 3]) #공기청정기의 옆칸부터 공기청정을 시작한다.
#0,2,1,3은 x좌표증가->y좌표감소->x좌표감소->y좌표증가 를 하기 위한 리스트이다.
a[y][x+1] = 0 #공기청정기 옆칸은 0으로 바꿔준다.
y, x = air.pop()
airclear(x+1, y, [0, 3, 1, 2])
#0,3,1,2는 역시나 x좌표증가->y좌표증가->x좌표감소->y좌표감소 를 해주기 위한 리스트
a[y][x+1] = 0
res = 0
for i in range(r):
res += sum(a[i])
print(res+2) #공기청정기의 값 두 개가 -1이므로 +2를 해준 값이 답이다.
반응형
'Coding - Algo > python' 카테고리의 다른 글
[프로그래머스] 다리를 지나는 트럭 (python 파이썬) (0) | 2021.04.03 |
---|---|
[백준] 1717번:집합의 표현 (python 파이썬) (0) | 2021.03.31 |
[백준] 1965번:상자넣기 (python 파이썬) (0) | 2021.03.28 |
[백준] 1316번:그룹 단어 체커 (python 파이썬) (0) | 2021.03.26 |
[백준] 2579번:계단 오르기 (python 파이썬) (0) | 2021.03.25 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 파이썬
- 프로그래머스 자바
- 프로그래머스 더 맵게
- 더 맵게
- yoloV3
- 메뉴리뉴얼 풀이
- 프로그래머스 파이썬
- 백준 17144
- 백준 풀이
- union-find
- swea 4070 타일링
- poker swea
- 프로그래머스
- swea 타일링 자바
- 1699 자바
- 3996 자바
- 파이썬 풀이
- 타일링 자바
- swea 1240 자바
- 삼성청년SW아카데미
- 백준
- 백준파이썬
- 백준 dp 문제
- 우분투
- swea 타일링
- swea 1240
- ubuntu
- SSAFY
- SWEA
- 1240 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함