백준_벌집 문제
풀이 코드

코드는 짧지만 규칙을 찾는게 당황스러웠다.
어떤 방식인지 잘 모르겠어서 결국 검색해보고 풀었다.

규칙을 찾는 것에 좀 더 익숙해질 필요가 있는 것 같다.

# 풀이

벌집

규칙을 찾으려면 숫자를 기준으로 보는 것이 가장 좋은 것 같다.
최소한의 방 개수를 기준으로 번호를 나열해보면 아래와 같다.

방 개수 번호개수 번호
1 1 1
2 6 2 3 4 5 6 7
3 12 8 9 10 11 12 13 14 15 16 17 18 19
4 18 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
... ... ...

이렇게 번호의 개수가 6의 배수만큼 늘어나는 것을 알 수 있다.

하지만 방의 개수를 알기 위해서는 끝자리 번호를 알아야하기 때문에, 끝자리를 구하기 위해 공식을 구해봤다.

6*0 + 1 6*1 + 1 6*3 + 1 6*6 + 1 6*10 + 1 순으로 늘어나는 것을 확인할 수 있다.

1, 3, 6, 10 , 15 ... 의 수열은 n*(n+1)/2로 구할 수 있으므로 끝 번호의 공식은 6*n(n+1)/2 + 1이다.

따라서 아래 코드와 같이 입력받은 수보다 끝 번호가 커지면 반복문이 멈추도록 하였으며, 그 때의 방의 개수는 nCnt + 1이므로 이를 출력했다.

# 코드

import java.util.Scanner;

public class Main {
	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		
		int nNum = sc.nextInt();
		int nCnt = 0;
		
		while(true) {
			if(((3*nCnt*nCnt) + (3*nCnt) + 1) >= nNum) {
				System.out.println(nCnt + 1);
				break;
			}
			nCnt++;
		}
		
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Last Updated: 1/3/2021, 2:26:34 PM