[BOJ / java] 2292 : 벌집
📚 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
보다 크다면,r
에6*c
를 더하고c
를 1 증가시킵니다. 여기서 6은 육각형 벌집의 각 층마다 6개씩 증가하는 규칙을 나타냅니다. - 만약
n
이r
보다 작거나 같아진다면, 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);
}
}
'Coding > Backjoon' 카테고리의 다른 글
[BOJ / java] 2869 : 달팽이는 올라가고 싶다 (0) | 2024.03.11 |
---|---|
[BOJ / java] 1193 : 분수 찾기 (0) | 2024.03.11 |
[BOJ / java] 2903 : 중앙 이동 알고리즘 (0) | 2024.03.09 |
[BOJ / java] 2720 : 세탁소 사장 동혁 (0) | 2024.03.08 |
[BOJ / java] 11005 : 진법변환2 (0) | 2024.03.07 |