본문 바로가기

개발(합니다)/알고리즘&코테

알고리즘 단계별로 풀어보기 : BOJ-2292(벌집)

반응형

문제(출처)


위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 

그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 

숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 

예를 들면, 13까지는 3개, 58까지는 5개를 지난다.


입력

첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.


출력

입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.


예제 입력

13


예제 출력

3


내 풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    public static void main(String args[]) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        try {
            int num = Integer.parseInt(br.readLine());
//          찾고자 하는 번호를 입력 받습니다.
            int result = honeryCombCount(num);
//          입력 받은 값을 인자로 전달하고 결과를 반환합니다.
            
            bw.write(String.valueOf(result));
            bw.flush();
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private static int honeryCombCount(int num) {
//      처음 1을 제외하고 6씩 증가하는 벌집의 규칙을 푸는 문제입니다.
        int checkNum = 0;
//      규칙적으로 6씩 증가하는 값을 저장 할 변수를 선언합니다.
        num -= 1;
//      처음 1번의 값을 미리 빼줍니다.
        int count = 1;
//      처음 1번을 미리 카운트합니다.
        while(num > 0) {
//          0보다 작을때까지 반복합니다.
            checkNum +=6;
//          6씩 증분하고 누적하여 저장합니다.
            num -= checkNum;
//          증분한 값을 입력 받은 값에서 빼줍니다.
            count++;
//          반복문이 반복 될때마다 카운트합니다.
        }
        return count;
    }
}


내 풀이 해석

1을 제외하고 6씩 증가하는 벌집문제입니다.
처음 1을 제외하고 6, 12, 18, 24로 증가합니다.
1은 시작점으로 1을 미리 빼주고 세어줍니다.
0보다 작을 때까지 6씩 증분하여 누적한 후 반복문이 반복 될 때마다 세어줍니다.


반응형