Notice
Recent Posts
Recent Comments
Link
승코딩당당당
[C++] 백준 2292: 벌집 본문
문제
[C++] 백준 2292: 벌집 BRONZE 2
https://www.acmicpc.net/problem/2292

접근 방법
이 문제는 벌집 모양으로 숫자가 증가할 때,
주어진 숫자 n이 몇 번째 껍질(층) 에 속하는지를 구하는 문제이다.
먼저 직접 숫자들의 범위를 나열해보면 다음과 같은 규칙을 확인할 수 있다.
1
2 ~ 7
8 ~ 19
20 ~ 37
38 ~ 61
각 층이 커질수록 증가하는 칸의 개수는 6의 배수로 증가한다는 패턴이 있다.
1
6
12
18
24
- 1층: 1
- 2층: 1 + 6×1
- 3층: 1 + 6×1 + 6×2
- 4층: 1 + 6×1 + 6×2 + 6×3 …
즉, 이런 방식으로 이전 범위의 끝값에 6 × i를 더해가며 범위를 확장하면 된다.
코드에서는 각 층의 마지막 숫자를 벡터에 저장하고 n이 해당 범위 안에 들어오는 순간 반복을 종료한다.
최종적으로 n이 포함된 층 번호를 출력한다.
구현 시 주의할 점
- 입력값 n이 1인 경우는 예외 처리가 필요하다.
이 경우 무조건 1층이다. - 벌집 숫자가 커질 수 있으므로 long long 타입을 사용해야 안전하다.
코드
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
long long int n = 0;
cin >> n;
vector<long long int> honeycomb;
honeycomb.push_back(1);
int index = 0;
int i = 1;
while (n != 1)
{
long long int range = honeycomb[index] + 6 * i; // 범위의 끝
honeycomb.push_back(range);
if (n <= range)
break;
index++;
i++;
}
if (n == 1)
cout << 1;
else
cout << i + 1;
return 0;
}'PS > BOJ' 카테고리의 다른 글
| [C++] 백준 1157: 단어 공부 (0) | 2025.12.29 |
|---|---|
| [C++] 백준 1927: 최소 힙 (0) | 2025.12.29 |
| [C++] 백준 5073: 삼각형과 세 변 (0) | 2025.12.28 |
| [C++] 백준 23971: ZOAC 4 (2) | 2025.12.28 |
| [C++] 백준 1253: 좋다 (1) | 2025.12.26 |