문제 이름 : 벌집
문제 유형 : 수학
문제
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
예제 입력 1 복사
13
예제 출력 1 복사
3
수학문제로 구현은 쉽지만 풀이방법이 바로 보이지는않는다.
중앙에서 1칸에있는 육각형은 1개 존재, (자기자신)
중앙에서 2칸에있는 육각형은 6개 존재,
중앙에서 3칸에있는 육각형은 12개 존재
즉 1칸까지 1개, 2칸까지 7개, 3칸까지 19개가 존재한다 (전체 육각형 갯수)
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int N, i;
cin >> N;
//arr[0] = 1; //벌집의 중앙에서 0칸까지 1개 ('1')
//arr[1] = 6; 벌집의 중앙에서 1칸까지 6개 ('2~7')
/*
arr[2] = 12;
arr[3] = arr[2] + 6;
arr[N] = arr[N-1] + 6;
*/
i = 0;
int sum = 1;
while(++i)
{
if(sum >= N) break;
sum += i * 6;
}
cout<<i<<endl;
return 0;
}
'알고리즘' 카테고리의 다른 글
BOJ_1932_정수 삼각형 (0) | 2022.03.06 |
---|---|
프로그래머스_정수 삼각형 (0) | 2022.02.22 |
BOJ 2096 내려가기 (0) | 2022.02.20 |
프로그래머스 신규아이디 추천 (0) | 2022.02.18 |
BOJ 2805 나무자르기 (0) | 2022.02.14 |
댓글