프로그래머스 이진 변환 반복하기

byeol·2023년 3월 29일
0

접근

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

이 문제는 성공했지만 toBinaryString()이라는 메서드를 이용하는 더 간단한 풀이 방법이 있어
비교해보려고 한다.

  • 10 진수 -> 2진수 String
    static String toBinaryString(int i)
    사용 예시
    ` String bin = Integer.toBinaryString(8); // 1000
  • 2진수 -> 10진수
    static int parseInt(String s, int radix)
    사용예시
    int t = Integer.parseInt("1000",2); //8 // 1000

나의 풀이

import java.util.*;

class Solution {
    
    public int[] solution(String s) {
        //x의 모든 0을 제거
        // x의 길이 c -> c를 2진법으로 표현한 문자열
        // 1이 될때까지 이진 변환의 횟수와, 제건된 모든 0의 개수 배열에 담아 return
        
        int n =0;
        int rm=0;
         
        while(true){
             n++;
             rm = rm+ s.length()-s.replace("0","").length();
             s=s.replace("0","");
             s= make_one(s.length());
            if(s.equals("1")) break;
        }
        
        
        int[] answer = {n,rm};
        
        return answer;
    }
    
    static String make_one(int t){
        Stack<Integer> st = new Stack<>();
        
        while(t!=0){
            st.push(t%2);
            t=t/2;
        }
        
        String result ="";
        while(st.size()!=0){
            result+=Integer.toString(st.pop());
        }
        return result;
        
    } 
}

toBinaryString()을 이용한 풀이

class Solution {
    
    public int[] solution(String s) {
        //x의 모든 0을 제거
        // x의 길이 c -> c를 2진법으로 표현한 문자열
        // 1이 될때까지 이진 변환의 횟수와, 제건된 모든 0의 개수 배열에 담아 return
        
        int n =0;
        int rm=0;
         
        while(true){
             n++;
             rm = rm+ s.length()-s.replace("0","").length();
             s=s.replace("0","");
             s= Integer.toBinaryString(s.length());
            if(s.equals("1")) break;
        }
        
        
        int[] answer = {n,rm};
        
        return answer;
    } 
}
profile
꾸준하게 Ready, Set, Go!

0개의 댓글

관련 채용 정보