본문 바로가기
Algorithm/Baekjoon

[백준] 2292번 : 벌집 - Java

by unknownomad 2022. 3. 23.

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

 

2292번: 벌집

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

www.acmicpc.net



알고리즘

 

N 벌집 개수(방 개수) COUNT (최소 루트)
1 1 1
2 ~ 7 6 2
8 ~ 19 12 3
20 ~ 37 18 4
38 ~ 61 24 5

 

  • N이 속해 있는 범위 내의 숫자들 : 최소 루트가 동일함
  • 벌집 개수 : 6의 배수로 증가

풀이

1. Scanner

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        int N = in.nextInt();
        int count = 1; //최소 루트
        int range = 2; //벌집 개수 범위에 따른 최소값
        //1 제외, 2.. 8.. 20.. 38...
 
        if (N == 1) {
            System.out.print(1);
        } else {
            while(range <= N) {	//각 범위의 최소값이 N 이하일 때까지 
                range += (6 * count); //다음 벌집 개수 범위의 최솟값으로 초기화
                count++;
            }
            System.out.print(count);
        }
    }
}

 

2. BufferedReader

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        int count = 1; // 겹 수(최소 루트)
        int range = 2;	// 범위 (최솟값 기준) 
        
        if (N == 1) {
            System.out.print(1);
        } else {
            while(range <= N) {	//각 범위의 최소값이 N 이하일 때까지 
                range += (6 * count); //다음 벌집 개수 범위의 최솟값으로 초기화
                count++;
            }
            System.out.print(count);
        }
    }
}

성능

  • BufferedReader > Scanner

 


출처 : https://st-lab.tistory.com/73

댓글