- 등비수열 문제
#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 출력
'코딩테스트 > programming_C++' 카테고리의 다른 글
baekjoon #2869_달팽이는 올라가고 싶다_c++ (0) | 2021.10.28 |
---|---|
baekjoon #1193_분수찾기 (0) | 2021.10.27 |
baekjoon #1712_손익분기점 (0) | 2021.10.27 |
baekjoon #1316_그룹 단어 체커_c++ (0) | 2021.10.27 |
baekjoon #2941_크로아티아 알파벳_c++ (0) | 2021.10.26 |