#35. [백준_C언어] 2292 : 벌집

 

 입력 코드 

#include  <stdio.h>

main() {
	int N, x = 0, y = 0, room;
	scanf("%d", &N);

	while (1) {
		if (N <= 6 * x + 1) {
			room = y + 1;
			break;
		}
		y++;
		x += y;
	}

	printf("%d", room);
}

 

 

 코드 설명 

#반복문 #수열 #규칙성 #수학

#include <stdio.h>

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

	int k, max, min;

	for (k = 1; k < 578; k++) {
		min = 3 * k*k - 3 * k + 2;
		max = 3 * k*k + 3 * k + 1;

		if (N >= min && N <= max)
			n = k + 1;
	}
	printf("%d", n);
}

처음에는 계차수열을 이용해서 min값과 max값을 정한 다음에 시작과 끝을 포함하여 1을 더해주었는데 계속 틀렸다.

#include  <stdio.h>

main() {
	int N, x = 0, y = 0, room;
	scanf("%d", &N);

	while (1) {
		if (N <= 6 * x + 1) {
			room = y + 1;
			break;
		}
		y++;
		x += y;
	}

	printf("%d", room);
}

찾아보니까 마지막 수만을 이용해서 구하는 방법도 있고, 

#include <stdio.h> 

main() {
	int n, i = 2, j = 5, cnt = 2; 
	
	scanf("%d", &n); 
	
	if (n == 1) { 
		printf("%d", 1); 
		return 0; 
	} 
	
	while (1) { 
		if (i <= n && i + j >= n) { 
			printf("%d", cnt); 
			break; 
		} 
		i = i + j + 1; 
		j += 6; 
		cnt++; 
	}
}

범위의 처음과 끝을 이용해서 그 사이에 있는 지 확인해서 구하는 방법도 있다.

 

 

참고한 사이트

dailycodingpractice.tistory.com/18

 

C언어 - 백준 2292 벌집

문제 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주

dailycodingpractice.tistory.com

travelerfootprint.tistory.com/35

 

백준 알고리즘 2292번: 벌집 C언어

문제 출처: www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는

travelerfootprint.tistory.com

 

 

 문제 출처 

www.acmicpc.net/problem/2292

 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌

www.acmicpc.net