Problem : 미세먼지 안녕
유형 : 구현
문제 해석
- T초가 지난 뒤 방 전체의 미세 먼지 양을 구하라.
- 미세먼지가 퍼진다.
- 공기청정기가 돈다.
문제 재해석
- 단순 구현 문제이다.
해결 전략 (15)
- 공기 청정기는 항상 1열에 있는점을 이용한다.
- 먼저 등장하는 부분이 앞, 나중에 등장하는 부분이 뒤이다.
- 미세 먼지를 퍼뜨린다.
- 미세 먼지가 퍼지는 것은 동시에 일어나므로, 다른 배열에 저장한다.
설계 , 구현 (40)
- 미세 먼지를 먼저 퍼뜨린다.
- 미세 먼지를 다 퍼뜨렸으면, 퍼뜨려진 만큼 본래 미세 먼지에 더한다.
- 공기 청정기는 앞뒤에 따라 공기의 방향이 다르다.
- 방향 좌표를 시계 방향 순으로 맞춰둔다.
- 시계 방향 : +1
- 반 시계 : -1
- 미세 먼지를 미는 작업은
큐
를 이용했다. 사실상 슬라이딩 윈도우 기법을 이용 했다.front
는 이전의 공간 상태.- 현재 상태를
큐
에 넣고, 현재 상태를 이전의 상태로 변경 시킨다.
주의할 점
- 미세먼지가 동시에 퍼져 나간다.
1x1
의 미세먼지가 퍼져서2x1
에 더해지고, 더해진2x1
이 퍼지면 안된다.
디버깅 (15)
- 먼지를 동시에 퍼뜨려야 하는데, 하나씩 퍼뜨리고 작업을 이어나가는 실수를 했다.
- 미세 먼지 총량을 구하지 않고, 미세 먼지가 있는 공간 개수를 리턴 시키는 실수를 했다.
리팩토링 (20)
- 초기 코드가 너무 길어서, 처음에는 미세 먼지가 있는 공간 역시 큐로 관리한것을 배열로 바꿔서 다시 구현했다.
코드
1 |
|
피드백
- 구현 속도를 좀 더 올려야겠다.
- 설계를 다 하고, 설계 내용을 한번 더 곱씹으며 구현하다 보니 오래 걸렸다.