본문 바로가기
카테고리 없음

백준 벌집

by OKOK 2018. 1. 25.

/*

육각형의 벌집이 있습니다. 1부터 시작해서 이웃하는 방으로 돌아가면서 1씩 증가.숫자 엔이 주어졋을때 중앙 1에서

엔번 방까지 최소개수의 방을 지나서 갈때 몇개의 방을 지나가는지 시작 끝 포함 계산

13까지는 3개 첫째 줄에 엔이 주어집니다. 그럼 숫자를 많이 해봐서 규칙을 찾아보도록 하겠습니다.

예를 들어서 13이라고 하면 1 + 6 + 12 + 18 + 24 + ... 이런식으로 갑니다 어디에 속하는지

알아보도록 하겠습니다. 먼저 1을 빼고 0보다 큰가? 계산을 합니다.

13 - 1 을 해서 12 입니다.

12 - 6 을 하면 6 입니다.

6은 12 보다 작습니다. 그렇기 때문에 답은 3 입니다. 이렇게 계산됩니다. 

처음 한개는 먼저 빼고 시작해보도록 하겠습니다. 

에를 들어서 9를 넣으면 


1 - 1 1개

N = 9

N = 8

i = 1

N - 6*i = 2

if(N<6*i) break;

i = 2

6 - 6*2 = 


2,3,4,5,6,7 - 2 6개

8,9,10,11,12,13,14,15,16,17,18,19 - 3 12개

20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37 - 4 18개

오케이요. 규칙이 나옵니다.

*/


#include <iostream>


using namespace std;


int N;

int i=1;

int ans;


void problemIn() {

cin >> N;

N = N - 1; 

}


/*

1은 무조건 포함이고요 그럼 N-1 로 시작해서 ans = 1 부터 시작하도록 합니다.

그리고 다음 6개는 ++

       다음 12개는 ++


   이런식으로 올라가면 됩니다. 


9로 시작하면요

9-1 로 해서 8로

넣어봅니다.

*/


void solve() {

if (N == 0)

cout << '1' << endl;

else {

for (int i = 1; N > 6 * i; i++) {

ans++;

N = N - (6 * i);

}

cout << ans + 2 << endl;

}


}


int main() {

problemIn();

solve();

return 0;

}


규칙찾기 문제라고 해서 보니, 답이 어떻게 간단한 수열처럼 흘러간다는 것을 체크합니다. 문제에서 규칙이 있을 것 같은 것은 여러가지 2~3가지 예제를 만들어서 직접 해보고, 그것으로 부터 규칙을 도출하면 됩니다. 규칙을 만들때, 꼭 한 두가지 예외가 발생하므로 이것을 처리하는 것도 주의하도록 합니다.