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

 

육각형 벌집 구조에서 1에서 N번째 방으로 갈때 최소 몇개의 방을 지나는지 구하면 되는 문제이다. 최소 거리로 가려면 

일직선으로 가야하는데 이렇게 되면 시작에서 몇개의 껍질을 이동하는지 구하면 된다. 일단 껍질은 육각형으로 껍질이 

늘어날 때 몇개의 수가 늘어나는지 알아보면 된다. 육각형이 커질수록 6의 배수로 수가 늘어나는 것을 볼 수 있다. 이를 

바탕으로 코드를 작성해보자

 

정답코드

#include <iostream>
using namespace std;

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

    // 1번 방은 자기 자신이므로 예외 처리
    if (N == 1) {
        cout << 1 << endl;
        return 0;
    }

    int layer = 1; // 현재 몇 번째 껍질인지 나타냄
    int end_of_layer = 1; // 각 껍질의 마지막 방 번호

    // N번 방이 포함된 껍질을 찾음
    while (end_of_layer < N) {
        end_of_layer += 6 * layer; // 다음 껍질의 마지막 방 번호
        layer++;
    }

    // 껍질 번호가 곧 지나가는 방의 수
    cout << layer << endl;

    return 0;
}

 

+ Recent posts