728x90
반응형

블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다.


문제 설명

  • 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여) 계산하는 프로그램을 작성하시오.
    (ex. 13 -> 3개, 58 -> 5개)
  • 첫째줄에 N(1 <=N <=1,000,000,000)이 주어진다.

풀이 전략

  • 방 하나가 증가할 때마다 숫자는 전의 방에서 6씩 증가한다. 6*1 + 6*2... + 6*k
  • 입력 숫자가 어느 줄에 있는지 찾기 위해 1 미만으로 떨어질 때까지 순회

소스 코드

#include <iostream>

using namespace std;

int Calc( int n, int result )
{
	if (n <= 1)
		return result;

	n = n - 6 * result;
	return Calc(n, ++result );
}
int main()
{
	int n;
	cin >> n;
	cout << Calc(n, 1);
}

링크

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

 

2292번: 벌집

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

www.acmicpc.net

 

728x90
반응형