https://school.programmers.co.kr/learn/courses/30/lessons/12980
K = 1 인 케이스부터 소모되는 전력(ans)을 구하고,
K 를 ans까지 늘여가며 소모되는 전력을 구한 뒤 최소값을 찾으면 될거같은데
import java.util.*;
public class Solution {
public int solution(int n) {
int ans = n;
for (int i = 1; i <= ans; i += 2) {
int power = consume(n, i, ans);
ans = Math.min(power, ans);
}
return ans;
}
int consume(int n, int K, int min) {
int power = 0;
while (n > 0) {
if (n % 2 == 0) {
n /= 2;
} else {
n -= K;
power += K;
}
if (power > min) break;
}
return power;
}
}
결국 K = 1이 무조건 최소 전력을 소모하는 듯하다.
import java.util.*;
public class Solution {
public int solution(int n) {
return consume(n, i);
}
int consume(int n, int K) {
int power = 0;
while (n > 0) {
if (n % 2 == 0) {
n /= 2;
} else {
n -= K;
power += K;
}
}
return power;
}
}
그럼 그냥 2진수로도 풀 수 있다..
import java.util.*;
public class Solution {
public int solution(int n) {
return useBinary(n);
}
int useBinary(int n) {
String bin = Integer.toString(n, 2);
int cnt = 0;
for (int i = 0; i < bin.length(); i++) {
if (bin.charAt(i) == '1') cnt++;
}
return cnt;
}
}
처음엔 bin을 replaceAll로 0을 제거한 뒤 총 글자 수를 반환했는데,
시간 초과가 뜨더라..
'코딩테스트 > programmers' 카테고리의 다른 글
N개의 최소공배수 (0) | 2023.09.25 |
---|---|
예상 대진표 (0) | 2023.09.21 |
구명보트 (0) | 2023.09.21 |
n진수 게임 (0) | 2023.09.19 |
전력망을 둘로 나누기 (0) | 2023.09.19 |