Problem Solving/BOJ

[백준 / BOJ] C++ 27961 고양이는 많을수록 좋다

nageune 2023. 4. 17. 12:01
728x90
반응형

27961번: 고양이는 많을수록 좋다

 

문제

https://www.acmicpc.net/problem/27961

 

27961번: 고양이는 많을수록 좋다

올바른 행동 순서가 될 수 있는 하나의 예시는 아래와 같으며, $4$번보다 더 작은 행동 횟수로 $6$마리의 고양이를 마도카의 집에 들이는 것은 불가능하다. 초기 상태($0$마리) $\rightarrow$ 생성

www.acmicpc.net

 

 

풀이

처음에 고양이는 0마리 있고, 1마리 생성하거나 현재 K마리의 고양이가 있으면 1~K마리의 고양이를 복제하는 것이 가능하다. 즉, 고양이가 1마리 이상 있을 때는 복제 연산만 사용하면 된다. 이때, 정확히 N마리의 고양이를 만들어야 하므로 2 * K ≥ N 이 되는 순간 연산이 종료된다. 따라서 2의 제곱승 꼴로 증가시키다가 N 이상이 되는 순간까지의 횟수다.

 

이렇게 구현을 해도 되지만 (log2 N) + 1을 출력해도 될 것 같다. (+1을 하는 이유는 맨 처음 1마리를 생성하는 연산 때문)

 

 

코드

#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  long long n, ans = 0, a = 0;
  cin >> n;
  while (a < n) {
    if (a == 0)
      a++;
    else 
      a *= 2;
    ans++;
  }
  cout << ans;
  return 0;
}

 

728x90
반응형