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

[백준 16235] 나무 재테크 (C++)

by Bloofer 2020. 4. 24.

A. 문제설명

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

문제에 대한 자세한 설명은 링크 참조

 

1. N * N 배열이 존재, 해당 배열 위에 나무를 키움

2. 매년 봄에는 나무가 각 자리에서 양분먹고 나이 1 증가, 양분이 부족하면 나무는 죽는다.(양분은 나이 적은 순부터 먹음)

3. 여름에는 죽은 나무가 해당 자리에 나이/2 만큼 양분이 됨

4. 가을에는 나무의 위치에서 인접한 8칸이 번식, 이때 5배수의 나이를 가진 나무만 해당함

5. 겨울에는 배열의 각 칸에 양분 추가

6. 최종적으로 K년 뒤의 나무의 총 개수 구하기

 

B. 접근법

시뮬레이션

문제의 풀이 자체는 어려울 것이 없으나 조건이 이것저것 여러가지 붙어있어 구현할 때 문제를 제대로 이해하지 않으면 실수하기 쉬운 유형이다. 문제의 조건에 충실하게 그대로 구현하도록 하자.

 

C. 풀이

1. 봄; 나무가 자기 나이만큼 땅에서 양분먹고 나이 1 증가, 한 칸에 나무 여러개 있으면 어린 나무부터 먹음, 양분 못먹는 나무는 죽음
2. 여름; 죽은 나무 → 양분, 각각 [죽은 나무의 나이/2]가 해당칸에 양분으로 추가됨

3. 가을; 나무 번식, 나이가 5배수인 나무에 한해 번식함, 인접 8칸에 나이 1 나무 생성됨. 땅을 벗어나는 경우 제외

4. 겨울; 각 땅에 A[x][y] 만큼 양분이 추가됨

5. K년동안 1~4 수행한 후, 최종 나무의 수 계수

 

D. 내 코드