백준 algorithm

백준 2292 - 벌집

cosmohoo 2019. 9. 8. 00:00
반응형

문제설명

그림을 그려보면 1의 숫자를 둘러싼 원이 계속 생기는 것을 볼 수 있다. 그 원에 속하는 숫자들까지는 거쳐가야 하는 횟수가 동일하다.

그 원들은 6의 배수로 크기가 커져 간다. 
1(방의번호)=>1(거쳐야하는 횟수)

2~7  => 2

8~19 => 3
20~37 => 4

이런 방식이다.
그래서 나는 prev= 6*i +prev라는 식을 세워 방의 번호가 속하는 범위를 만들었다. 

그 이후 i를 통해 몇번을 통해 그 방까지 갈 수 있는지 알아낼 수 있다. 

 

#include <iostream>
using namespace std;

int main()
{
	int cnt = 0;//지나가는 방의 갯수변수 
	int num=0;
	int prev = 1;
	cin >> num;
	for (int i = 1; i < 1000000000; i++)
	{
		prev = (6 * i) + prev;
		if (num == 1)
		{
			cnt = 1; break;
		}
		else if (num <= prev)
		{
			cnt = i + 1;
			break;
		}
	}
	cout << cnt<<'\n';
	return 0;
}
반응형