https://www.acmicpc.net/problem/2292
문제
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
예제 입력 1
13
예제 출력 1
3
변수 r은 1, 2~7, 8~19 .. 를 의미하고,
변수 t는 겹을 의미한다.
무한반복문을 돌며 벌집의 숫자가 내가 입력한 방보다 클 경우 빠져나오게 된다.
이 때 몇개의 방을 지나쳤는지 알기위해 a=6*t 를 이용하고 한겹이 추가되는 것이므로 t++을 해준다.
그리고 r에 a를 더해주어 다음 겹의 방 숫자를 저장하게 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d", &n);
if(n<1 || n>1000000000){
printf("다시 입력해주세요\n");
scanf("%d", &n);
}
int r=1; //2~7, 8~19 ...
int t=1; //겹
int a=1; //겹 계산할 때 쓸 것
while(true){
if(r>=n)
break;
a=6*t++;
r+=a;
}
printf("%d\n", t);
}
|
'C++ > 백준' 카테고리의 다른 글
[C++][백준] 2438 별 찍기 - 1 (0) | 2020.03.10 |
---|---|
[C++][백준] 2309 일곱 난쟁이 (0) | 2020.03.10 |
[C++][백준] 2231 분해합 (0) | 2020.03.09 |
[C++][백준] 2156 포도주 시식 (0) | 2020.03.09 |
[C++][백준] 2108 통계학 (0) | 2020.03.09 |