loading
본문 바로가기
Coding/Backjoon

[BOJ / java] 2292 : 벌집

by NeuLyeo 2024. 3. 9.

[BOJ / java] 2292 : 벌집

 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌

www.acmicpc.net

 

 

 

 

📚 Table of Contents

     

     

     

     

    문제

     

    위의 그림과 같이 육각형으로 이루어진 벌집이 있다.

     

    그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다.

     

    숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오.

     

    예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

     

     

    입력

    첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.

     

     

    출력

    입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.

     

     

    예제

    예제 입력 1

    13

    예제 출력 1

    3

     

     

     

     

    문제 풀이

    코드설명

    • 코드의 동작 방식:
      • 먼저, BufferedReader를 이용해 사용자로부터의 입력을 받습니다. 입력된 숫자는 벌집의 위치를 나타냅니다.
      • r은 벌집의 중심에서부터의 거리를 나타내며, c는 육각형의 층을 나타냅니다.
      • while문을 통해 입력된 숫자가 r보다 크다면, r6*c를 더하고 c를 1 증가시킵니다. 여기서 6은 육각형 벌집의 각 층마다 6개씩 증가하는 규칙을 나타냅니다.
      • 만약 nr보다 작거나 같아진다면, while문을 벗어나고 이때의 c 값을 출력합니다. 이는 벌집의 중심부터 입력된 숫자까지의 육각형 층 수를 나타냅니다.
    • 코드의 핵심 부분:
      • r += 6 * c++; 부분은 벌집의 육각형 구조를 이용한 핵심적인 계산 부분입니다. 각 층마다 육각형의 변이 6씩 증가하므로 6*c가 사용되었습니다.
    • 코드의 흐름:
      • 사용자 입력 → while문을 통한 계산 → 결과 출력

     

     

    풀이

    import java.io.*;
    
    public class _05_벌집 {
        public static void main(String[] args) throws IOException {
            // 사용자로부터의 입력을 받기 위한 객체 생성
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
            // 사용자로부터 벌집의 위치 입력 받기
            int n = Integer.parseInt(br.readLine());
    
            // 벌집의 중심에서부터의 거리와 육각형의 층을 초기화
            int r = 1;
            int c = 1;
    
            // 입력된 숫자가 r보다 크다면 반복
            while (n > r) {
                // 현재 층의 육각형의 개수를 r에 더하고 층 수를 증가시키기
                r += 6 * c++;
            }
    
            // 벌집의 중심에서부터 입력된 숫자까지의 육각형의 층 수 출력
            System.out.println(c);
        }
    }