문제 링크
개의 양의 정수가 주어진다.
다음 2가지 행동을 통해서 모든 정수 값을 홀수로 만들려고 할 때 최소한으로 행동한다면 몇 번 행동해야 하는가?
크게 3가지로 나눠서 생각 한 거 같다.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int tc;
int a[200001];
int n;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
// init
cin >> tc;
for (int tcCnt = 1; tcCnt <= tc; ++tcCnt) {
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> a[i];
int odd = 0;
int even = 0;
int save = INT_MAX;
for (int i = 1; i <= n; ++i) {
if (a[i] % 2 == 1) { odd++; continue; }
even++;
int cnt = 0;
while (a[i] % 2 == 0) {
cnt++;
a[i] /= 2;
}
save = min(save, cnt);
}
if (even == 0) cout << 0 << '\n';
else if (odd) cout << even << '\n';
else cout << save + even - 1 << '\n';
}
}
그냥 저냥 푼 문제