본문 바로가기
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);
}
}