알고리즘/백준(BOJ)

백준 2292 벌집

오뚜깅 2021. 2. 1. 17:29
반응형

벌집 모양의 방들이 존재할 때 주어진 번호의 방에 들어가기 위해 몇 번 방을 지나가야하는지를 구하는 문제이다.

벌집 모양은 6각형으로 형성되어있고, 일정한 규칙을 파악하면 쉽게 풀 수 있다.

일단 동일한 횟수로 지나가야 들어갈 수 있는 방들의 집합을 구분해본다.

 

Group 1: 1번 1번 방 / 1번 / 1개 = 6 x 0

Group 2: 2~7번 방 / 2번 / 6개 = 6 x 1

Group 3: 8~19번 방 / 3번 / 12개 = 6 x 2

Group 3: 20~37번 방 / 4번 / 18개 = 6 x 3

Group 3: 38~61번 방 / 5번 / 24개 = 6 x 4

Group 3: 62~91번 방 / 6번 / 30개 = 6 x 5

 

각 그룹의 개수는 6의 배수로 나뉘는 일정한 패턴을 가지고 있다.

따라서 주어진 정수가 어떤 범위의 그룹에 속하는 지 구하고 해당 그룹의 횟수를 답으로 정해주면 된다.

#include <iostream>

using namespace std;

int main(){
    int num;
    cin >> num;

    if(num == 1)
        cout << 1;
    else{
        int range = 1;
        int count = 1;
        while(true){
            if(num <= range)
                break;
            range += count * 6;
            count++;
        }

        cout << count;
    }
    
    return 0;
}
반응형