[Programmers] #181880 - 1로 만들기 [Java][C++][Python]
[Programmers] #181880 - 1로 만들기 [Java][C++][Python]
1. 아이디어
홀수 x에서 1을 뺀 뒤 2로 나누는 연산은 정수 나눗셈 $\lfloor x / 2 \rfloor$와 결과가 같다. 짝수는 그냥 2로 나누므로, 결국 홀수·짝수를 구분할 필요 없이 각 원소를 1이 될 때까지 2로 나누며 횟수를 세고 모두 합하면 된다.
2. 복잡도
| 접근 | 시간 | 공간 |
|---|---|---|
| 풀이 | $O(N \log M)$ | $O(1)$ |
($N$ = num_list의 길이, $M$ = num_list 원소의 최댓값)
3. 코드
풀이 [Java][C++][Python]
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public int solution(int[] num_list) {
int cnt = 0;
for (int x : num_list) {
while (x > 1) {
x /= 2;
cnt++;
}
}
return cnt;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <bits/stdc++.h>
using namespace std;
int solution(vector<int> num_list) {
int cnt = 0;
for (int x : num_list) {
while (x > 1) {
x /= 2;
cnt++;
}
}
return cnt;
}
1
2
3
4
5
6
7
8
def solution(num_list):
cnt = 0
for x in num_list:
while x > 1:
x //= 2
cnt += 1
return cnt
This post is licensed under CC BY 4.0 by the author.