본문 바로가기
코딩공부/백준 (java)

[백준 2292] 벌집 (java)

by CodingKwon 2021. 7. 25.

문제 링크

https://www.acmicpc.net/problem/2292

 

2292번: 벌집

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

www.acmicpc.net

 

나의 코드 (java)

import java.util.Scanner;

public class Main {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);

        // 찾을 방의 번호
        int a = sc.nextInt();
        int cnt = 1;

        while (true){
            if (a <= 1){
                System.out.println(cnt);
                break;
            } else {
                // 다음으로 갈수록 6의 배수만큼 더 빼줌
                a -= cnt*6;
                // 방의 개수 카운팅
                cnt++;
            }
        }
    }
}

 

벌집 1은 방의 개수가 1개 필요합니다.

벌집 2~7은 방의 개수가 2개 필요합니다.

벌집 8~19는 방의 개수가 3개 필요합니다.

 

이 차이를 보면 처음에는 1에서 2~7로 갈 때는 1~6이 증가했고 그다음 8~19로 갈 때는 1~12만큼 증가했습니다.

즉 방의 개수가 증가할 때마다 6의 배수만큼 증가하는 규칙을 발견할 수 있습니다. (1~6 → 1~12)

 

반복문을 통해서 입력값이 1보다 작거나 같아졌을 때 방의 개수가 정답이 됩니다.

만약 아직 목적지에 도달하지 않았다면 처음에는 6을 빼고 그다음에는 12를 빼고 그다음에는 18을 뺄 것입니다.

 

이러한 로직을 통해서 몇 개의 방이 필요한지 구할 수 있습니다.

댓글