알고리즘 풀이
[백준] 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++;
}
평소에 자주 참고하는 블로그를 보니 거기서는 각각의 범위의 최솟값을 기준으로 삼아 문제를 풀었다.
이럴때는 내가 쓸데없이 문제를 어렵게 푼 경우가 많았는데, 이번에는 풀이 방법만 다르고 내 풀이도 충분히 합리적인 방식이었기 때문에 점점 발전하고 있다는 생각이 들어 뿌듯했다.