본문 바로가기
코딩테스트/programming_C++

baekjoon #2292_벌집_c++

by prometedor 2021. 10. 27.
  • 등비수열 문제
#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 출력