코테/프로그래머스

[프로그래머스] 이진 변환 반복하기 - java

tony1724 2025. 4. 8. 22:33

문제 설명 :

https://school.programmers.co.kr/learn/courses/30/lessons/70129

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 요약 :

  1. 이진수의 1의 개수 구하기
  2. 1의 개수를 이진수로 변환
  3. 1,2 과정을 반복하며 변환횟수, 제거된 0의 개수 구하기

 

문제 풀이 시간 : 20분

문제 성공 여부 : 성공

 

 

접근 방법(성공) :

  1. charAt()으로 문자열의 '1' 개수 파악
  2. 1의 개수를 toBinaryString으로 이진수로 변환
  3. 반복

 

전체 코드(성공) :

class Solution {
    public int[] solution(String s) {
        int[] answer = new int[2];
        
        String number = s;
        
        while(number.length()>1){ // 1이 될 경우 break
            int oneCnt = getOneCount(number); // 1의 개수 반환
            
            int removeZeroCnt = number.length() - oneCnt; // 제거된 0의 갯수
            
            // 정답 갱신
            answer[0]++;
            answer[1] += removeZeroCnt;
            
            number = Integer.toBinaryString(oneCnt); // 이진수로 변환
        }
        
        return answer;
    }
    
    static int getOneCount(String number){ // 1의 개수 반환
        int oneCnt = 0;
        for(int i=0; i<number.length(); i++){
            if(number.charAt(i) == '1') oneCnt++;
        }
        return oneCnt;
    }
}

 

Integer.toBinaryString만 안다면 쉽게 풀 수 있는 문제 같다.