[프로그래머스] 이진 변환 반복하기(Java)

수경·2023년 1월 31일
0

problem solving

목록 보기
110/174

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

풀이

❗️처음 풀이 법
1. 문제 요구사항 그대로 구현
2. 숫자를 2진법으로 바꿀 때
-> 숫자 % 2 의 결과로 0과 1의 개수를 세어줌
-> 1의 개수를 다시 2진법으로 변환 (반복)

... 그런데 Integer.toBinaryString() 이라는 친절한 메소드가 있었다 ㅎ

그래서 다른 방법으로도 풀었다 ㅎ....

❗️두 번째 풀이 법

  1. 문자열의 길이를 저장해두고 후에 0의 개수를 셀 수 있도록 함
  2. 문자열에서 0을 삭제
  3. 0의 개수 = 처음 문자열의 길이 - 나중 문자열의 길이
  4. 나중 문자열의 길이를 2진법으로 변환

➡️ 반복, 반복 횟수 저장

코드

// 첫 번째 풀이
public int[] solution(String s) {
		int zero = 0;
		int num;

		for (char c : s.toCharArray())
			if (c == '0') zero++;
		num = s.length() - zero;

		int count = 1;
		while (num != 1) {
			count++;
			int len = 0;
			while (num != 0) {
				if (num % 2 == 0) zero++;
				else len++;
				num /= 2;
			}
			num = len;
		}

		return new int[]{count, zero};
	}
// 두 번째 풀이 - Integer.toBinaryString() 사용
public int[] solution(String s) {
		int count = 0;
		int zero = 0;

		while (!s.equals("1")) {
			int len = s.length();
			s = s.replace("0", "");
			zero += len - s.length();
			s = Integer.toBinaryString(s.length());
			count++;
		}
		return new int[]{count, zero};
	}
profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글