백준/단계별

백준 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이다.

따라서 정상적으로 출력된다.