백준 2292번은 벌집의 중간에서 입력받은 방까지의 최단거리를 구하는 문제이다. 최단거리를 구하는 문제라고 되어있어서 어렵다고 생각할 수도 있지만, 실은 하나의 규칙을 따라 구성되어있다.
1이 중심이라고 한다면,
2 ~ 7 -> 방 2개 지남, 방 개수 6개
8 ~ 19 -> 방 3개 지남, 방 개수 12개
20 ~ 37 -> 방 4개 지남, 방 개수 18개
로, 방이 늘어나는 개수가 등차수열을 이루고 있다.
반복문을 돌리면서, 한 변수에 6을 더하면 방이 늘어나는 개수의 등차수열을 만들 수 있다. 이를 이용하여, 방 범위를 바꿔가면서 그 사이에 입력받은 변수 n이 있다면 그때 출력할 변수를 출력해주면 된다.
이를 코드로 바꾸면 다음과 같다:
#include <stdio.h>
#include <stdlib.h>
int main(void){
	int num;
	scanf("%d", &num);
	int a = 0; int start = 2; int i;
	if (num == 1) {
		printf("1\n");
		return 0;
	}
	i = 2;
	for (;;) {
		a += 6;
		if (start <= num && start + a - 1 >= num) {
			break;
		}
		else {
			i++;
			start += a;
		}
	}
	printf("%d\n", i);
	return 0;
}