백준/단계별
백준 2292 C#) 벌집
alpacadabra
2022. 4. 27. 21:50
벌집에 층이 있다고 생각하자. (아래 사진 참조)
1층 : 1
2층 : 2 ~ 7
3층 : 8 ~ 19
...
여기서 각 층마다 끝번호를 구하면 차례대로 1, 7, 19, 37, 61 ... 이 되는데 이를 점화식으로 표현하면
층수 n에 대하여 A(1) = 1, A(n) = A(n - 1) + 6(n - 1) 이라고 할 수 있다.
이 점화식을 이용하여 문제를 풀어보자.
int n = int.Parse(Console.ReadLine());
int last = 1;
int cnt = 1;
while (n > last)
{
last = last + 6 * (++cnt - 1);
}
Console.Write(cnt);
위에서 구한 점화식으로 끝번호 last를 계속 구한다. 여기서 층수는 cnt이다.
last가 계속 증가하다가 방 번호 n이 last보다 작거나 같아질 때 그 방은 cnt층에 존재할 것이다.
이해가 안된다면 3층에 존재하는 방 번호 12를 생각해보자.
끝번호 last가 1, 7일 때는 (층수 cnt가 1, 2일 때와 같다) while문의 조건에 위배되지 않는다.
그러나 last가 19가 될 때는 while문을 벗어나게 되고 그 때의 cnt는 3이다.
따라서 정상적으로 출력된다.