PS/BOJ

[백준 BOJ] 2292 벌집

Jubil 2020. 3. 7. 14:06
반응형

링크

https://www.acmicpc.net/problem/2292

 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

www.acmicpc.net

풀이

 

N번 방을 몇 개의 방을 거쳐야 갈 수 있는지 계산하는 문제입니다.

 

 

라인을 그려서 개수를 세어보았는데, 라인별로 6씩 증가하는 것을 볼 수 있었습니다.

 

그래서 저는 세 가지 변수를 두어 답을 찾기로 했습니다.

 

N 값을 받는 n, 1~라인까지의 전체 방 개수 tmp, 몇 개의 라인을 거쳤는지 세는 cnt

tmp를 1로 설정해준 다음, 라인을 거칠 때마다 tmp += cnt * 6을 해주면 tmp는 n과 비교하는 기준이 됩니다.

 

그렇게 설정하고 n이 tmp보다 작거나 같은 경우에 반복문을 빠져나와 cnt를 출력하면 문제를 해결할 수 있습니다.

 

코드

//2292_벌집
#include <cstdio>
using namespace std;

int n, cnt, tmp=1;

int main() {
	scanf("%d", &n);

	while (++cnt) {
		if (n <= tmp) break;

		tmp += cnt * 6;
	}

	printf("%d\n", cnt);

	return 0;
}

 

반응형

'PS > BOJ' 카테고리의 다른 글

[백준 BOJ][DP] 2775 부녀회장이 될테야  (0) 2020.03.07
[백준 BOJ] 2869 달팽이는 올라가고 싶다  (0) 2020.03.07
[백준 BOJ] 2839 설탕 배달  (0) 2020.03.07
[백준 BOJ] 4673 셀프 넘버  (0) 2020.03.01
[백준 BOJ] 1065 한수  (0) 2020.02.29