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

class Solution {
public int[] solution(String s) {
int[] answer = new int[]{0, 0};
while(!s.equals("1")){
answer[0]++;
int[] one = countOne(s);
answer[1] += one[1];
s = translate(one[0]);
}
return answer;
}
public int[] countOne(String s){
int len = 0;
for(int i = 0; i < s.length(); i++){
len += s.charAt(i) == '1' ? 1 : 0;
}
return new int[]{len, s.length() - len};
}
public String translate(int s){
StringBuilder sb = new StringBuilder();
while(s > 1){
int remain = s % 2;
sb.append(remain);
s /= 2;
}
if(s == 1) sb.append(1);
return sb.reverse().toString();
}
}

너무 복잡하게 푼거 같아서 간결한 버전을 찾아봤다.
class Solution {
public int[] solution(String s) {
int[] answer = new int[2];
while (!s.equals("1")) {
int originalLength = s.length();
s = s.replace("0", ""); // 0 제거 후
answer[1] += originalLength - s.length(); // 제거된 0의 개수 누적
s = Integer.toBinaryString(s.length()); // 1의 개수를 2진수로 변환
answer[0]++; // 변환 횟수 증가
}
return answer;
}
}
