본문 바로가기
백준

[백준] 2292번 : 벌집 – JAVA [자바]

by Hongwoo 2022. 7. 10.
반응형

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

 

2292번: 벌집

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 2292번 벌집은 브론즈 난이도 2의 수학 문제이다. 이 문제는 사진같이 육각형으로 이루어진 벌집이 있고 번호 N으로 갈 때 몇 개의 방을 지나가는지를 출력하면 되는 문제이다. 이런 유형의 문제는 패턴을 찾는 게 중요하다.

 

우선 이 문제에서는 시작과 끝을 포함한다고 나와있다. 즉, 1번에서 시작해도 1번으로 갈 때 방 1개를 지나는 것이다. 

 

그리고 N개의 방을 지날 때 갈 수 있는 갈 수 있는 방을 한번 보겠다.

 

N = 2일 때 2 ~ 7번 방까지 갈 수 있다.

N = 3일 때 8 ~ 19번 방까지 갈 수 있다.

N = 4일 때 20 ~ 37번 방까지 갈 수 있다.

 

이 패턴에서 볼 수 있듯이 N이 1씩 증가할 때마다 갈 수 있는 방의 개수가 6씩 증가한다. 따라서 N = 2일 때 6개의 방, N = 3일 때 12개의 방, 그리고 N = 4일 때 18개의 방을 갈 수 있다.

 

이 문제는 그래서 while-loop을 이용해서 풀 수 있다. 우선 가고 싶은 방 N이 입력으로 주어진다. 먼저 N에서 1을 빼주고 int형 변수 count를 1로 선언한다.

 

그리고 6의 배수만큼 빼주면서 count를 1씩 증가시킨다. N이 0 이하가 됐을 때의 count가 따라서 답이 된다.

 

자세한 코드는 밑에 있다.

 


  • 코드

 

import java.io.*;
import java.util.*;
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());
        if (n == 1) {
            System.out.print(1);
            return;
        }
        n -= 1;
        int count = 1;
        int minus = 6;
        while (n > 0) {
            n -= minus;  //6의 배수만큼 빼줌
            count++;
            minus += 6;
        }
        System.out.print(count);
    }
}

 

 

반응형

댓글