반응형
https://www.acmicpc.net/problem/2292
문제
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
풀이
해당 문제는 수학문제로 해결하였다. 방을 지나는 최소 단위 범위가 있는데 다음과 같다
1 : 1번 통과
2 ~ 7 : 2번 통과
8 ~ 19 : 3번 통과
20 ~ 37 : 4번 통과
....
즉 처음 1, 2, 8, 20에 대한 규칙을 찾게 되면 숫자 N이 주어 졌을 때 몇번 통과했는지 알 수 있다.
1을 제외한 2, 8, 20에 대한 점화식으로 f(n) = 3*n^2 - 3*n +2 의 식이 만들어 진다.
#include<iostream>
#include<math.h>
using namespace std;
int main() {
int inputNum;
cin >> inputNum;
int count = 1;
int spoint = 1;
while (true) {
if ((3 * pow(spoint, 2) - 3 * spoint + 2) > inputNum) {
break;
}
count++;
spoint++;
}
cout << count << endl;
}
끝.
반응형
'알고리즘 문제 > 백준' 카테고리의 다른 글
[백준 알고리즘] 11726번 2*N 타일링 (0) | 2020.08.09 |
---|---|
[백준 알고리즘] 10844번 쉬운 계단 수 (0) | 2020.08.08 |
[백준 알고리즘] 2193번 이친수 (0) | 2020.08.06 |
[백준 알고리즘] 1260번 DFS와 BFS (0) | 2020.08.05 |
[백준 알고리즘] 1152번 단어의 개수 (0) | 2020.08.05 |
댓글