코딩테스트/programming_C++
baekjoon #2292_벌집_c++
prometedor
2021. 10. 27. 04:41
- 등비수열 문제
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
int min = 0;
if(N == 1)
min = 1;
for (int room = 2;room <= N;min++) {
room += 6 * min;
}
cout << min;
return 0;
}
N => 입력 받을 방 번호
min => 중앙 1에서 N번 방까지 지나야할 최소 방 개수 / 최초의 min 값은 0으로 지정, N = 1일 경우 min = 1 로 고정
room => 방 번호 비교 변수
방 번호 (room) | 1 | 2 ~ 7 | 8 ~ 19 | 20 ~ 37 | 38 ~ 61 | ... |
지나야 할 최소 방 개수 (min) | 1 | 2 | 3 | 4 | 5 |
2, 8, 20, 38, ... 을 이용한 등비수열 => 초기값이 2 이고, 공비가 6인 등비수열 : 6 * min
초기값 room = 2, 등비수열 room += 6 * min
1개 지나야 할 때 -> min = 1로 고정
2개 지나야 할 때 -> room = 2 부터 2 + 6 * 1 전 까지
3개 지나야 할 때 -> room = 2 +
ex) 13
N = 1일 경우 min = 1 로 고정
room += 6 * min | min++ | room <= N |
2 + 6 * 0 = 2 -> room = 2 | 1 | room = 2 <= N = 13 -> true |
2 + 6 * 1 = 8 -> room = 8 | 2 | room = 8 <= N = 13 -> true |
8 + 6 * 2 = 20 -> room = 20 | 3 | room = 20 <= N = 13 -> false |
room > N 이면, 반복문 종료하고 min 출력