📍 백준 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를 추가하라는 조건이다.
규칙을 알아내는 것 까지는 쉽게 도달했는데, 해당 조건을 가지고 어떻게 구현을 해야할지 몰라서 많이 헤맨것 같다.
아주 간단한 문제였는데 아쉬움이 남는다.
'하루 알고리즘 1문제 풀기' 카테고리의 다른 글
백준 28702번 - FizzBuzz 문제 C++ (0) | 2025.03.31 |
---|---|
백준 10989문제 - 수 정렬하기 3 C++ (0) | 2025.03.31 |
백준 2569번 - 달팽이는 올라가고 싶다 C++ (0) | 2025.03.31 |
백준 15829번 - Hasing 문제 C++ (0) | 2025.03.28 |
백준 2231번 - 분해합 문제 C++ (0) | 2025.03.27 |