공부/백준(C++) - 2022~

백준 2292번: 벌집 [C++]

상연 2022. 1. 12. 22:18

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

 

2292번: 벌집

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

www.acmicpc.net

 

코드

#include <iostream>
using namespace std;

int main() {
	int n, room = 1, pass = 1;
	cin >> n;
	
	while((n - 1) > 0){
		n -= 6 * pass++;
	}
	cout << pass;
}

 

설명

벌집에서 중앙 1을 기준으로 둘러싼 방의 끝번호가 있다.

1, 7, 19, 37, 61 ...

이 수의 규칙을 찾으면 간단하게 풀 수 있는 문제이다.

1 + 6 = 7

7 + 6 * 2 = 19

19 + 6 * 3 = 37

...

이전 끝번호 방에서 6 * n한 수가 다음 끝번호 숫자인것이다.

따라서 이 n을 통과한 방 개수로 가정을 하고 코드를 작성하면 풀 수 있는 문제였다.