◎ 자료구조와 알고리즘/백준(BOJ) 문제풀이

[백준 / BOJ] 2292번 벌집 (C++, Python)

Reo 2022. 1. 18. 10:14
반응형

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

 

2292번: 벌집

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

www.acmicpc.net


문제


문제 풀이

가장 중앙 방, 즉 1번 레이어는 1, 2번 레이어부터 2~7, 3번 레이어는 8~19, 4번 레이어는 20~36..

즉 6, 12, 18, 24의 등비수열대로 늘어나는 패턴을 확인할 수 있다. 이를 활용해 등비수열의 합을 구하고 늘어난 레이어를 출력해주면 된다.

 

C++ 상세 풀이

더보기
void solution(int N) {
    int cnt = 1;
    int layer = 1;

    while (N > cnt) {
        cnt += 6 * layer;
        layer++;
    }

    cout << layer;
}

 

위에서 cnt는 방 갯수를 세기 위한 변수이고, layer은 층을 세기 위한 변수이다. 즉, 결국 layer을 출력해야 한다.

일단 둘 다 1로 초기화한 후, 입력받은 N이 cnt보다 클 동안 등비수열을 이용해 layer을 점점 증가시켜 주어 어느 층인지 판별한다.

Python 상세 풀이

더보기
N = int(input())
cnt = 1
layer = 1

while N > cnt :
    cnt += 6 * layer 
    layer += 1

print(layer)

 

위에서 cnt는 방 갯수를 세기 위한 변수이고, layer은 층을 세기 위한 변수이다. 즉, 결국 layer을 출력해야 한다.

일단 둘 다 1로 초기화한 후, 입력받은 N이 cnt보다 클 동안 등비수열을 이용해 layer을 점점 증가시켜 주어 어느 층인지 판별한다.

 

C++ 코드 전문

 

Python 코드 전문

 

소감

 

반응형