반응형
문제
코드
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int number = 0;
for (int i = 2; i <= n; number++)
i += 6 * number;
if (n == 1)
number = 1;
cout << number << endl;
return 0;
}
풀이
"층"을 구하는 것인데요. 이 층은 6의 등비수열로 이루어져 있습니다.
숫자를 자세히 보면
1
2~7
8~19
20~37로
6 12 18 24... 순으로 묶여있는 것을 볼 수 있습니다. 이럴 경우 6 * Layer 식으로 범위가 늘어갑니다. 이를 활용하여 등비수열의 합을 구하면 되는데요.
int n;
cin >> n;
int number = 0;
for (int i = 2; i <= n; number++)
i += 6 * number;
이렇게 for문을 써서 i는 6 * number 만큼 증가하게 하고서 루프를 짜면 됩니다. 이럴 경우
n = 19라면
number = 0, i = 2로 시작
첫 번째 반복 : number = 1, i = 8 2 + 6 * 1
두 번째 반복 : number = 2, i = 20 8 + 6 * 2
이런 식으로 되기 때문에 i가 n보다 커졌으므로 루프는 종료되게 됩니다. 이때 number는 2가 됩니다. 따라서 19번 방은 2번째 층에 속하게 되는 것입니다.
규칙을 찾는 것은 간단하겠지만 이런 등비수열을 구하는 코드를 전에 해보지 않았다면 코드를 생각하기까지 시간이 좀 걸릴 것 같습니다. 먼저 등비수열 코드를 만드는 방법을 보고서 해당 문제를 풀어보는 방법도 추천드립니다.
반응형
'IT 프로그래밍 > 백준' 카테고리의 다른 글
[c++] 백준 3009번 네 번째 점 (0) | 2024.06.01 |
---|---|
[c++] 1193번 : 분수찾기 (0) | 2024.05.30 |
[C++] 2720번 세탁소 사장 동혁 (0) | 2024.05.25 |
[c++] 2139번 나는 너가 살아온 날을 알고 있다. (0) | 2024.05.24 |
[c++] 백준 2563번 색종이 (0) | 2024.05.22 |