/* 육각형의 벌집이 있습니다. 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가지 예제를 만들어서 직접 해보고, 그것으로 부터 규칙을 도출하면 됩니다. 규칙을 만들때, 꼭 한 두가지 예외가 발생하므로 이것을 처리하는 것도 주의하도록 합니다. |