알고리즘 풀이

[백준] 2292번: 벌집 - java 풀이

코디드 2023. 6. 30. 11:04

 

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

public class Main2292 {

	public static void main(String[] args) throws IOException{
		BufferedReader br =  new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		
		int i = 0;
		int sum = 0;
		int result = 0;
		
		while(true) {
			sum += 6 * i;
			if(N<=1+sum) {
				result = i+1;
				break;
			}
			i++;
		}
		System.out.println(result);
	}
}

 

일반 수학 카테고리로 가니까 바로 구현하는 것보다 수학문제를 풀듯이 직접 연습장에 풀어본 후에 규칙을 발견하고 구현하는게 더 효과적이다. 이 문제의 경우에도 아래 표와 같은 규칙을 발견했다.

 

N 벌집 개수 증가한 벌집 개수 (6 * i)
1 1 6 * 0
2~7 6 6 * 1
8~19 12 6 * 2
20~37 18 6 * 3
38~61 24 6 * 4
62~91 30 6 * 5

 

벌집 개수는 6개, 12개, 이렇게 6의 배수로 늘어난다. 범위를 설정해줄때 그 전 범위보다 6, 6+12, 6+12+18... 이렇게 늘어나기 때문에 6 * 0, 6 * ( 0 + 1), 6 * ( 0 + 1 + 2) .. 이렇게 늘어난다는 걸 구현해주면 된다.

 

while(true) {
			sum += 6 * i; // 6 * 0, 6 * ( 0 + 1), 6 * ( 0 + 1 + 2)  만큼 추가됨
			if(N<=1+sum) {
				result = i+1;
				break;
			}
			i++;
		}

 

 

평소에 자주 참고하는 블로그를 보니 거기서는 각각의 범위의 최솟값을 기준으로 삼아 문제를 풀었다.

이럴때는 내가 쓸데없이 문제를 어렵게 푼 경우가 많았는데, 이번에는 풀이 방법만 다르고 내 풀이도 충분히 합리적인 방식이었기 때문에 점점 발전하고 있다는 생각이 들어 뿌듯했다.