본문 바로가기

하루 알고리즘 1문제 풀기

백준 2292번 : 벌집 C++

📍 백준 2292번 : 벌집 C++

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

 

 

🧩문제요약 : 1번 방에서 시작해서 N번 방에 도달하기 위해 지나야하는 최소 층수를 구하는 문제 

 

1번 방은 1층 (기본)

그 다음 부터는 6개씩 늘어난다. 

 

 

코드 구현

#include <stdio.h>
using namespace std;

int main(){
    int N, layer = 1, cnt = 1; 
    scanf("%d",&N);
    while(N>cnt){
        cnt += 6*layer;
        layer++;
    }
    printf("%d\n", layer);
}

 

👍이 코드에서 배울점

이 문제를 풀다가 loop의 조건을 어떻게 줘야할지 고민을 많이 했는데 생각보다 아주 간단하게 해결할 수 있었다. 

N>cnt로 해결할 수 있었다.

 

조건을 이렇게 한 이유는 다음과 같다. 

  • N : 도달하려고 하는 방 번호 
  • cnt : 현재 층까지 포함된 마지막 방 번호 

layer는 현재 층수를 나타내고 cnt는 지금 현재 층의 마지막 방 번호를 저장하고 있다. 

그래서 (N > cnt) N이 cnt보다 클 때 , 

즉 현재 layer까지의 방 번호보다 더 큰 방 번호를 가지고 있으면 layer를 추가하라는 조건이다. 

 

규칙을 알아내는 것 까지는 쉽게 도달했는데, 해당 조건을 가지고 어떻게 구현을 해야할지 몰라서 많이 헤맨것 같다.

아주 간단한 문제였는데 아쉬움이 남는다.