728x90
SMALL
백준 문제 풀이: 2292 [벌집]
문제 링크: https://www.acmicpc.net/problem/2292
문제 설명:
벌집 구조에서 주어진 방 번호 N까지 도달하기 위해 거쳐야 하는 최소 방 수를 구하는 문제입니다.
- 중심 방(1번 방)부터 시작하여 각 층마다 방의 개수는 6씩 증가합니다.
- 예를 들어, 첫 번째 층에는 1개의 방, 두 번째 층에는 6개의 방, 세 번째 층에는 12개의 방이 있습니다.
문제 해결 코드
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
if (N == 1) {
cout << 1 << endl;
return 0;
}
int cnt = 1; // 중심 방에서 시작
int layer = 1; // 벌집의 현재 층
while (N > cnt) {
cnt += 6 * layer; // 각 층의 방 개수는 6의 배수로 증가
layer++;
}
cout << layer << endl;
return 0;
}
코드 설명
- 핵심 알고리즘: 중심 방에서 시작하여 N번 방까지의 최소 거리를 계산합니다.
- 구현 세부사항:
- 방 번호 N이 현재 층의 마지막 방 번호보다 크면 다음 층으로 이동합니다.
- 현재 층에서 거쳐야 하는 방 개수는 중심 방에서 시작해 6씩 증가합니다.
- 층 수(layer)를 증가시키며 방 번호 N을 포함하는 층을 찾습니다.
- 시간 복잡도: O(√N), 방 번호가 특정 층에 포함되는지를 확인하는 데 걸리는 시간
결과
주어진 방 번호 N까지 도달하기 위해 거쳐야 하는 최소 층 수를 출력합니다. 각 층의 방 개수가 6씩 증가하는 규칙을 활용해 효율적으로 계산했습니다.
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 수학' 카테고리의 다른 글
백준 2751번 [수 정렬하기 2](C++)-yes6686- 티스토리 (0) | 2024.01.02 |
---|---|
백준 2609번 [최대공약수와 최소공배수](C++)-yes6686- 티스토리 (0) | 2024.01.02 |
백준 2108번 [통계학](C++)-yes6686- 티스토리 (0) | 2024.01.02 |
백준 1978번 [소수 찾기](C++)-yes6686- 티스토리 (0) | 2024.01.02 |
백준 1929번 [소수 구하기](C++)-yes6686- 티스토리 (1) | 2024.01.02 |