제출 코드
- 1의 개수를 숫자로 저장해둔 뒤, 이진변환 루틴을 반복하면서 0의개수와 변환 수를 count해준다.
- 숫자로 저장된 1의 개수는 루틴을 반복할 때마다 알아서 차감한다.
- 매 회차마다 2의 18제곱에서부터 1(=2^0)까지 모든 수를 한번씩 점검한다는 점이 조금 아쉬우나, 시간초과가 될 정도는 아니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.*;
class Solution {
public int[] solution(String s) {
int total=s.length(), cnt_zero = 0, cnt_binary=0;
// 초기 0 제거
char[] ch = s.toCharArray();
for(char c : ch) if(c=='0') cnt_zero++;
// 1의개수 -> 이진법 변환
int cnt_one = total - cnt_zero;
while(cnt_one > 1){
int origin = cnt_one;
int now = cnt_one;
cnt_one = 0;
for(int i=18; i>=0; i--){
if(origin<Math.pow(2, i)) {
continue; //유효하지 않은 앞자리 skip
}else if(now>=Math.pow(2, i)) {
now -= Math.pow(2, i);
cnt_one++;
}else{
cnt_zero++;
}
}
cnt_binary++;
}
int[] answer = new int[2];
answer[0] = cnt_binary+1;
answer[1] = cnt_zero;
return answer;
}
}