본문 바로가기

알고리즘 공부 및 문제 풀이

[c++] 백준 2292 벌집

백준 단계별로 풀어보기 [기본수학 1] 벌집

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

 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌

www.acmicpc.net

[풀이]

1을 level 0이라고 했을 때, level이 증가할 때 마다 6*level만큼 육각형 벌집이 증가한다.

각 level+1이 지나가는 방의 개수이므로 주어진 숫자 N에 대해서 몇 level에 속하는지를 계산하면 된다.

n이 1 + 6(1+2+3...+level)이랑 같거나 작아지는 level을 찾는다.

 

[코드]

#include <iostream>

int main(void) {
	int num = 1;
	int level;
	int n;
	std::cin >> n;
	for (level = 0; ; level++) {
		if (1 + 3 * level * (1 + level) >= n)
			break;
	}
	
	std::cout << level + 1;
	return 0;
}