본문 바로가기
Baekjoon 자바 코드/일반 수학

[백준] 2292번 벌집 풀이 코드 (Java 자바)

by 망댕이 2024. 12. 18.
반응형

중앙 1번부터 시작해서 시계방향으로 점점 숫자를 쌓아 들려가고 있다. 

주어진 번호가 중앙 1번부터 최소 몇 개의 방을 지나가는지 출력하는 문제이다.

접근 방법)

우선 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 구하기 위해 어렵게 생각할 필요 없다.

단순하게 '몇 겹째에 해당 숫자가 존재하는지 출력하시오'를 어렵게 말로 풀이해 놓은것이다.

 

점의 개수 증가 규칙

첫 번째 중앙에는 점이 1개, 두 번째 겹에는 7개, 세 번째 겹에는 19개가 배치되는 방식으로 점의 개수가 점점 늘어난다.

이 과정에서 겹마다 점의 개수는 특정 규칙을 따른다. 각 겹에서 점의 개수는 6 × 1, 6 × 2, 6 × 3, ... 형태로 증가한다.

 

위 규칙을 기반으로 다양한 코드를 작성할 수 있다.

나같은 경우는 N 값에서 각 겹의 점 개수를 차례로 삭감하며 겹의 개수를 계산하는 코드이다. N > 0인 동안 반복하며, 현재 겹의 점 개수를 빼고, 겹의 개수를 1씩 증가시킨다.

 

이해가 안 된다면 아래 코드를 보면서 확인해 보자.

정답 코드 1)

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();          // 입력값 N
        int minus = 6;                 // 겹마다 증가하는 값(6, 12, 18, 24 ...가 될 예정)
        int result = 1;                // 최종 출력 값
        if(N == 1){
            System.out.print(1);
        }else{
            N = N-1;                   // 계산하기 쉽게 -1을 해줌.
            while(N>0){                // N>0동안 반복 작업
                N = N - minus;         // 현재 겹의 점 개수를 N에서 삭감
                result++;              // 겹의 개수 증가
                minus = minus + 6;     // 다음 겹의 숫자 개수 갱신
            }
            System.out.print(result);
        }
        
    }
}

 

반응형