백준 2292번 : 벌집 [Java]

문제출처

www.acmicpc.net/problem/2292

 

2292번: 벌집

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

www.acmicpc.net

import java.util.Scanner;
public class d016_Q2292 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int index = 0;
		int ans = 1;
		
		while(N != 1) {
			index = index + ans++;
			int r = 1 + 6 * index;
			if(r >= N) {break;}
		}
		
		System.out.println(ans);
		sc.close();
	}
}

 

이걸 마지막으로 단계별 풀어보기 수학1의 문제는 다 풀었다,

 

또 규칙을 먼저 찾으려고 했고

점점 육각형이 커지면서 예를들어 13의 경우 두번째 육각형에 위치하기 때문에 처음 시작점 1을 포함해 정답이 3이다.

입력된 수 N이 몇번째 육각형에 위치하는지 찾으려면 N이 위치한 육각형의 다음 육각형이 시작하는 부분의 수보다 작아야한다.

 

육각형에서 가장 큰 수를 찾으려면 어떤 규칙으로 육각형이 커지는지 찾으면 되는데

빨강 초록 노랑 파랑 순으로 보면 가장 큰 수가

7, 19, 37, 61 이렇게 늘어나고 있다 식으로 분해를 해보면

1 + (6 * 1)

1 + (6 * 3)

1 + (6 * 6)

1 + (6 * 10)

즉 1 + (6 * a)에서 a가

1

1+2

1+2+3

1+2+3+4

와 같이 늘어난다.

 

while문을 써서 설마 시간초과가 날까봐 두근두근했는데 다행히 한번에 맞았다.

myoskin