티스토리 뷰

Algorithm/Baekjoon

[백준] 2292번 벌집(JAVA)

다교이 2022. 7. 17. 23:04
728x90

문제

- 육각형으로 이루어진 벌집에는 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매김

- 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지 출력

- 시작과 끝 방을 포함한 개수를 출력 

 

해결방법

문제에 주어진 그림을 보면 어렵지 않게 규칙을 찾을 수 있다. 중앙에 위치한 1은 통과해야 하는 벌집의 개수가 1개이고, 그 다음 6개의 벌집은 2개를 통과해야 하고, 그 다음 12개의 벌집은 3개를 통과해야 한다. 즉, 통과해야 하는 벌집의 개수가 1개씩 늘어날 때마다 위치할 수 있는 벌집은 6개씩 늘어나는 것을 알 수 있다.

코드

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

class Main{
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int count = 1;			// 통과해야 하는 벌집의 개수
        int last = 1;			// 위치할 수 있는 벌집의 주소 범위 중 가장 큰 값

        while(true){
            if(N == 1){			// 중앙에 위치한 1은 1개만 지남
                System.out.println(1);
                break;
            }
            else {					// 위치할 수 있는 벌집의 주소 범위 사이의 값을 계산
                if(N >= last + 1 && N <= last + count * 6){
                    System.out.println(count + 1);	// 해당 범위 내에 있다면 통과해야 하는 벌집 개수 출력
                    break;
                }
                last = last + count * 6;	// 위치할 수 있는 벌집의 주소 범위 중 가장 큰 값
                count++;			// 통과해야 하는 벌집의 개수 증가
            }
        }

        br.close();
    }
}
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday