[BAEKJOON 2292번 : 벌집]
[문제]

[고찰]
아래의 코드는 제가 정답으로 제출한 코드입니다.
2번부터 7번, 8번부터 19번, 29번부터 37번 등, 2 + (6 x i)번 부터 7 + (6 x (i + 1))번까지로 규칙을 가지고 있습니다.
그래서 min과 max를 각각 2와 7로 설정하고, 무한 루프문에서 답으로 출력될 answer을 1씩 더하고, 규칙을 만족하는지 확인합니다.
다만, 입력 값이 1이라면 그에 대한 출력 값 역시 1이므로 예외 처리를 따로 해주었습니다.
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
int answer = 1;
int min = 2, max = 7;
int i = 1;
while(1)
{
answer++;
if (n == 1)
{
cout << 1;
return 0;
}
if (n >= min && n <= max)
{
cout << answer;
return 0;
}
min += (6 * i);
max += (6 * (i + 1));
i++;
}
}
다른 분의 풀이를 보니, 더 간단한 방법이 있어 아이디어와 함께 답을 정리해보려고 합니다.
[개념]
생각을 해보니 새로운 레이어의 방 끝 부분을 기준으로만 해도 괜찮았을텐데, 저는시작 부분부터 끝 부분까지 모두 기준으로 삼았었습니다. 그리고 입력 값이 1일 때의 예외 처리를 따로 했었는데, 기준을 끝 부분으로 한다면, 1 + (6 x i) 꼴이 되기 때문에 1일 때의 예외 처리를 따로 하지 않아도 됩니다.
[정리]
기준을 더 간단히 할 수 있는지 한 번더 고민해보는 자세를 가져야 할 것 같습니다.
[Solution]
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
int answer = 1;
int max = 1;
while(max < n)
{
max += 6 + answer;
answer++;
}
cout << answer;
}'코딩 테스트' 카테고리의 다른 글
| [코딩테스트 21일차] BAEKJOON 1712번, BAEKJOON 10811번, BAEKJOON 2587번 (0) | 2025.05.23 |
|---|---|
| [코딩테스트 20일차] BAEKJOON 2231번 : 분해합 (0) | 2025.05.23 |
| [코딩테스트 18일차] BAEKJOON 2908번, 2798번 (0) | 2025.05.14 |
| [코딩테스트 17일차] BAEKJOON 1052번, 10809번 (0) | 2025.05.12 |
| [코딩테스트 16일차] BAEKJOON 3052번 : 나머지 (0) | 2025.05.10 |