백준 2292

sehan·2020년 4월 20일
0

백준 2292번 벌집

#include <stdio.h>

int main(void) {

	int n, i, max;

	scanf("%d", &n);

	for (i = 1, max = 1; n > max; i++) 
		max = max + (6 * i);
		
	printf("%d", i);

	return 0;
}

최소 개수로 방을 지나기 위해서는 해당 방이 속해있는 겹이 몇 겹인지를 찾아야 함 (예시를 들어 3은 두 번째 겹에 속하며 1을 기준으로 두 칸 움직여 최소 개수로 접근할 수 있음)

입력 받은 수가 속한 겹은 겹의 최댓값이 입력받은 수를 넘은 시점의 인덱스임. 겹의 최댓값이 입력받은 수를 넘어섰다는 것은 해당 최대값이 입력받은 수가 속한 겹의 최댓값이라는 것을 의미함

한 겹의 최댓값(가장 큰 번호)은 이전 겹의 최댓값에 현재 겹의 방의 수를 더하면 구할 수 있음
겹에 따른 방의 수는 6의 배수 형태로 점점 늘어남 (6x1, 6x2...)

profile
필요한 공부를 찾아가며 현재를 열심히 살아가려 노력하고 있습니다.

0개의 댓글