본문 바로가기

코딩테스트/Programmers

[JAVA] 이진 변환 반복하기

< 내 풀이 >

class Solution {
    static int removeNum=0;
    static String remove_0(String s){ //0을 제거하는 함수 
        String str="";
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)!='0')
                str+=s.charAt(i);
            else
                removeNum++; //제거하는 0의 개수 증가 
        }
        return str;
    }
    public int[] solution(String s) { 
        int count=0;
        while(!s.equals("1")){
            s=remove_0(s); // 0을 제거
            s= Integer.toBinaryString(s.length());
            count++; //이진 변환의 횟수 
        }
        
        int[] answer = {count,removeNum};
        return answer;
    }
}

 

✏️ 풀이 방법

 

- 문자열 s가 "1" 이 될 때까지 반복문을 돈다.

 :  0을 제거하는 함수 실행 ( 제거하는 0의 개수 증가 )

 :  0을 제거하고 난 문자열의 길이를 이진수로 변환

 : 이진 변환의 횟수 증가 

- { 이진 변환의 횟수, 제거한 0의 개수 } return 

 

< 다른 사람의 풀이 >

class Solution {
    public int[] solution(String s) {
        int[] answer = new int[2];
        int temp;
        while( !s.equals("1") ) {
            answer[1] += s.length();
            s = s.replaceAll("0", "");
            temp = s.length();
            s = Integer.toBinaryString(temp);
            
            answer[0]++; // 이진 변환의 횟수 
            answer[1] -= temp; // 제거한 0의 개수 
        }
        return answer;  
    }
}

  

=> 위의 풀이에서 replaceAll 을 사용해 0을 없애주는 방법이 똑똑한 것 같다. 나는 0을 제거하는 함수를 만들어서 코딩을 했는데, 다음에 비슷한 문제를 풀게 된다면 위의 방식을 따라해야겠다. 

 

< 추가 : 10진수 ➡️ 2진수 구현 >

int n = 2; //2진수 예시
int num10 = 256; //10진수
String numStr = ""; //n진수 문자열

while(num10 > 0){
	numStr = String.valueOf(num10%n) + numStr; // numStr을 뒤에 붙여주는 것 중요!!!!! 
	num10 /= n;
}

System.out.println(numStr); //2진수 100000000

 

 

✍🏻 느낀점

 

 나는 10진수를 2진수로 바꿔주는 내장함수가 있는지 몰랐다. 왜 처음 알았지? 당연히 2진수로 바꿔주는 함수를 코딩할 생각을 했는데, 이번에 이 문제를 통해 알게 돼서 다행이다. 자주 필요할 때마다 써먹어야지. 

 

 

 

참고 블로그


https://morethan-hmj0507.vercel.app/BinaryToDecimal

 

[Java] 기수 변환(e.g. 10진수 ↔ 2진수 변환)

기수 변환

morethan-hmj0507.vercel.app

https://hianna.tistory.com/527

 

[Java] 10진수 <-> 2진수, 8진수, 16진수로 변환하기

10진수 -> 2진수, 8진수, 16진수로 변환하기 java.lang.Integer의 toBinaryString(), toOctalString(), toHexaString() 메소드를 이용하여 10진수를 2진수, 8진수, 16진수 문자열로 변환할 수 있습니다. 리턴 타입 클래스

hianna.tistory.com

 

'코딩테스트 > Programmers' 카테고리의 다른 글

[JAVA] 다음 큰 숫자  (0) 2024.04.22
[JAVA] 숫자의 표현  (1) 2024.04.20
[JAVA] JadenCase 문자열 만들기  (1) 2024.04.18
[JAVA] 최솟값 만들기  (0) 2024.04.17
[JAVA] 올바른 괄호  (0) 2024.04.17