이번 문제는 벌집 이동 문제였습니다. 문제를 이해 설명은 사진으로 대체하겠습니다.
이번에는 2가지 방법으로 풀어봤습니다.
Step 0. 해답 코드 (배열 생성 후 확인)
import java.util.Scanner;
public class Hive_2292 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = 1; //배열 속 숫자
int[] bee = new int[18258];
bee[0] = 1;
for (int i = 1; i < 18258; i++) {
count = count + 6 * i;
bee[i] = count;
}
int n = sc.nextInt();
for (int i = 0; i < bee.length; i++ ) {
if (n == 1) {
System.out.println(1);
}
if (n > bee[i] && n <= bee[i + 1]) {
System.out.println(i + 2);
}
}
}
}
Step 0_1. 해답 코드 (배열 없이)
package Basic_Math;
import java.util.Scanner;
public class Hive2_2292 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = 1; // 배열 속 숫자
int n = sc.nextInt();
for (int i = 1; i < 18258; i++) {
count = count + 6 * i;
if (n == 1) {
System.out.println(1);
break;
}
else if (count >= n) {
System.out.println(i + 1);
break;
}
}
}
}
문제 설명 전 이번에는 2가지 방식으로 풀었습니다. 처음에는 배열에 숫자를 집어넣고 확인하는 방법과 두 번째는 배열 없이 풀었습니다. 결국은 같은 방식인데 저렇게 나눈 이유는 제가 문제만 보고 바로 수식이 안떠올라서 일단 숫자를 저장해서 만들어보고 그걸 토대로 두 번째 방법으로 풀었습니다. 즉, 1번째 코드를 통해 생각을 정리하고 식을 만든 후 두 번째 코드로 발전하였습니다.
Step1. 문제 접근
그림을 보면 아실 수 있듯이 벌집의 숫자는 1 -> 7 -> 19..이렇게 증가하고 있고 그 증가 범위는 6의 배수입니다. 이 부분을 이용하여 조건식을 세워 문제를 풀었습니다.
Step 2. 문제 풀이
미리 계산을 통해 벌집의 숫자가 10억을 기준으로 가장 큰 숫자는 18258칸이라는 것을 도출해낸 상태로 풀었습니다.
int[] bee = new int[18258];
bee[0] = 1;
for (int i = 1; i < 18258; i++) {
count = count + 6 * i;
bee[i] = count;
}
int n = sc.nextInt();
for (int i = 0; i < bee.length; i++ ) {
if (n == 1) {
System.out.println(1);
}
if (n > bee[i] && n <= bee[i + 1]) {
System.out.println(i + 2);
}
}
1_1. 두 번째 방법은 첫 번째 방법에서 이미 값들을 확인 했으므로 배열을 따로 안 쓰고 바로 조건식을 줘서 풀었습니다.
for (int i = 1; i < 18258; i++) { // 최대칸까지(첫 칸은 1만 존재해서 if로 빼주므로 조건은 18259가 아닌 18258) 반복문으로 확인
count = count + 6 * i; //벌집의 각 줄에서 가장 큰 값 (7, 19, 37, 61..)
if (n == 1) { //1일 경우 바로 값 도출
System.out.println(1);
break;
}
else if (count >= n) { // 계산을 통해 얻어진 count값이 입력 받은 값보다 크거나 같아지는 순간을 찾아서 값 도출.즉 , 저 입력된 값은 저 범위 안에 존재한다.
System.out.println(i + 1); //첫 칸을 제외했으므로 + 1
break;
}
}
Step 3. 느낀 점
이번 문제는 다른 바로 얼마전에 풀었던 문제보다는 빠르게 풀 수 있었고 수학적 사고를 기르는데 도움이 됐던거 같습니다! 따로 큰 문제 없이 풀 수 있었고 재미도 있었던 문제였습니다.
출처 : 백준 2292번 https://www.acmicpc.net/problem/2292