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

sundays·2024년 4월 26일
0

문제

이진 변환 반복하기

풀이

이진수 관련한 문제도 자주 출제 된다.
2진수에서 10진수로 변환시 에는 다음과 같다

Integer.parseInt("10", 2); // 2

10진수에서 2진수로 변환시에는 다음과 같다

String.toBinaryString("6"); // 110

반대로 알고 있는 경우도 있기 때문에 주의 해야한다

int[] answer = {0, 0};

// 1이 아닐때 까지 반복한다
while (!s.equals("1")) {
	// 반복 횟수 저장
	answer[0]++;
	for (int i = 0; i < s.length(); i++) {
    	if (s.charAt(i) == '0') {
        	// 0의 횟수 저장
        	answer[1]++;
        }
    }
    
    s = s.replace("0","");
    // 문자열의 길이를 2진수로 변경
    s = String.toBinaryString(s.length());
}

다른 분들 코드를 보니까 더 좋은 방법이 있다.
0의 횟수를 저렇게 for 문으로 한번 더 해주는 것보다
0을 공백으로 변경한 후의 데이터의 길이와 변경하기 전에 가지고 있는 데이터의 길이를 갖고 있다면 0을 몇개 가지고 있는지도 알 수 있기 때문이다.

그렇다면 for문을 다음과 같이 대치하면 된다

String temp = s.replace("0", "");
answer[1] += s.length() - temp.length();
s = temp;

더 쉽게 풀 수있는데 당장 풀려고 하면 또 돌아가야 하니.. 성격급한 나로썬 차근차근히 하기가 어렵.

전체 코드

전체 코드

profile
develop life

0개의 댓글