백준 문제풀이/기본수학1

2292. 벌집 (자바, Java)

뮤츠 2022. 9. 18. 23:42

이전 문제보다는 수학적으로 까다로운 문제인데, 수열문제입니다. 5시방향으로 지나가는 방향을 잘 보시죠.

1, 7, 19, 37, 61...계차수열입니다. 계차수열은 수열의 앞뒤 차이인 계차를 새로운 수열로 만든 것인데,

1, 7, 19, 37, 61...의 계차수열은 6, 12, 18, 24...각 항이 6의 배수인 등차수열입니다.

참, 왜 5시 방향쪽을 봐야하는지 설명을 안했군요. 1부터 한칸씩 전진했을때, 같은 이동만큼 전진하는 그룹은 육각형 모양을 띄게되고, 그 그룹 중 가장 큰 숫자가 5시방향에 모여있습니다. 예를들어, 1칸 전진했을 때, 2~7중에 가장 큰 것은 7, 2칸 전진했을 때 8~19사이에서 가장 큰 수는 19...이런식이죠. 따라서 앞서 구한 벌집 수열에서, 해당 숫자보다 작다면 거기서 걸음을 멈춘다 생각하시면 되겠습니다. 7이면 벌집 수열의 2번째 항과 같고, 2칸 지나는 셈 (1,7), 예제의 13은 2항인 7보다 크고 3항인 19보다 작으니, 3칸 지나는 셈 (1,4,13) 이런식입니다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
				
		for (int i=1; ; i++) {
			
			if (n<= 3*Math.pow(i, 2)-3*i + 1) {
				
				System.out.println(i);
				break;
				
			}
			
		}
		
		

	}

}