Home P70129. 이진변환 반복하기
Post
Cancel

P70129. 이진변환 반복하기

문제

image

제출 코드

  • 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;
    }
}
This post is licensed under CC BY 4.0 by the author.