본문 바로가기
알고리즘/백준

[백준 17144] 미세먼지 안녕! (C++)

by Bloofer 2020. 3. 5.

A. 문제설명

https://www.acmicpc.net/problem/17837

자세한 설명은 링크참조

 

1. R * C 칸의 방에 미세먼지 양 정보가 주어짐

2. 동시에 공기청정기 위치 (r, c)도 주어짐. 공기청정기는 세로 2칸 크기

3. 매 초마다 미세먼지 확산과 공기청정기 작동이 일어남

4. 미세먼지가 인접한 네 방향으로 확산
   4-1. 공기청정기가 있거나, 벽이면 그 방향으로는 확산 X
   4-2. 확산되는 양은 먼지량/5이고 소수점은 버린다.
   4-3. 기존 칸에 남은 미세먼지의 양은 '먼지량 - (먼지량/5) * (확산된 방향의 개수)'

5. 공기청정기 작동

   5-1. 위쪽은 반시계, 아래쪽은 시계방향으로 벽을 타고 공기이동
   5-2. 먼지는 바람의 방향대로 한 칸씩 이동. 바람은 먼지없는 바람이고, 공기청정기로 들어간 미세먼지는 없어짐

6. T초 후 전체 먼지량 계수

 

정답률 50%가 넘는 비교적 쉬운 문제이다. 먼지 확산과 공기청정기 작동 두가지 규칙을 잘 지키며 구현하도록 하자.

 

B. 접근법

시뮬레이션 문제. 먼지 확산과 공기청정기 작동은 문제 조건대로 그대로 구현하면 됨

 

C. 풀이

1. T번의 반복문 수행

2. 미세먼지 확산
   2.1 확산시 매 위치에서 주변 위치로 퍼뜨리면서 새로 갱신되는 먼지량은 계산량에 포함하지 않도록
   2.2 확산시 퍼지는 위치는 AC, 벽 제외한 먼지 이미 있는 위치 포함

3. AC 작동
   3.1 상단 AC 반시계 방향 이동

   3.2 하단 AC 시계 방향 이동

4. T초 후 에어컨 위치 제외하고 전체 먼지량 계수

 

D. 내 코드