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();
}
}
'알고리즘' 카테고리의 다른 글
백준 1024번 수열의 합 (JAVA) (0) | 2023.07.31 |
---|---|
백준 1010번 다리 놓기 (JAVA) (0) | 2023.07.30 |
백준 1005번 ACM Craft (JAVA) (0) | 2023.07.28 |
프로그래머스 상담원 인원 (JAVA) (0) | 2023.07.27 |
백준 10472번 십자뒤집기 (JAVA) (0) | 2023.07.26 |