나의 풀이
#include <stdio.h>
int main(void) {
int n, room=1, cnt=1;
scanf("%d", &n);
while (room < n) {
room += cnt * 6;
cnt++;
}
printf("%d", cnt);
}
벌집은 한 겹 둘러싸일 때마다 일정한 간격으로 늘어난다.
중앙을 0번째 겹이라고 치고 첫 번째 값은 1, 다음 겹에서 제일 큰 값은 7, 그 다음은 19, ...이런 식인데,
여기에서 규칙성을 찾을 수 있다.
순서(i) | 0 | 1 | 2 | 3 | 4 |
숫자 | 1 | 7 | 19 | 37 | 61 |
규칙 | 1+6*0 | 1+6*1 | 7+6*2 | 19+6*3 | 37+6*4 |
이전 항+6*i가 되는 것이다.
즉 답을 구하려면 저 규칙에 따라 쭉쭉 올라가며,
값이 문제의 입력값 n을 넘어섰다면 그대로 i를 반환해주면 정답이다.
문제에서는 중앙값인 1도 지나간 방으로 판정하므로
시작값은 1로 두면 된다.
'프로그래밍 > 백준' 카테고리의 다른 글
[백준 C언어] 2798. 블랙잭 (0) | 2022.12.29 |
---|---|
[백준 C언어] 2941. 크로아티아 알파벳 (0) | 2022.12.29 |
[백준 C언어] 3052. 나머지 (0) | 2022.12.21 |
[백준 C언어] 2908. 상수 (2) | 2022.12.21 |
[C언어] 10809. 알파벳 찾기 (0) | 2022.12.20 |