알고리즘
프로그래머스 이진 변환 반복하기 (JAVA)
박카스마시며코딩
2023. 7. 29. 17:44
https://school.programmers.co.kr/learn/courses/30/lessons/70129
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
저는 구현을 통해 문제를 해결하였습니다.
저는 0을 세는 함수, 0을 제거하는 함수, 길이를 2진법으로 변환하는 함수 이렇게 3가지로 나눠서 구현해 문제를 해결하였습니다.
class Solution {
private static final String ONE = "1";
public int[] solution(String s) {
int removedZeroCnt = 0;
int cnt = 0;
while(!s.equals(ONE)){
removedZeroCnt += countZero(s);
s = removeZero(s);
s = changeLengthToBinary(s);
cnt++;
}
int[] answer = new int[]{cnt,removedZeroCnt};
return answer;
}
private static int countZero(String s){
int ZeroCnt = 0;
for(int i = 0 ; i < s.length() ; i++){
if(s.charAt(i) == '0'){
ZeroCnt++;
}
}
return ZeroCnt;
}
private static String removeZero(String s){
int oneCnt = 0;
for(int i = 0 ; i < s.length() ; i++){
if(s.charAt(i) == '1'){
oneCnt++;
}
}
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < oneCnt ; i++){
sb.append(1);
}
return sb.toString();
}
private static String changeLengthToBinary(String s){
int length = s.length();
StringBuilder sb = new StringBuilder();
while(length >= 1){
sb.append(length % 2);
length /= 2;
}
sb = sb.reverse();
return sb.toString();
}
}