th42500의 TIL

[Java] 월간 코드 챌린지 시즌1 - 이진 변환 반복하기 (Lv2) 본문

Algorithm/Programmers

[Java] 월간 코드 챌린지 시즌1 - 이진 변환 반복하기 (Lv2)

th42500 2022. 8. 3. 00:05

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

✔ 입출력 예시

이진 변환 반복하기 입출력 예시

 

 

💡 풀이과정 및 포인트

1️⃣ 초기 문자열 s가 1이 될때까지 변환 작업 반복

2️⃣ s에서 모든 0 제거

3️⃣ 0을 제거한 문자열의 길이를 이진수로 변환

4️⃣ 정답 배열 answer의 길이는 2 👉 [제거한 모든 0의 개수, 이진수로 변환한 횟수]

 

 

✔ 소스코드

import java.util.Arrays;

public class Solution {  // 이진 변환 반복하기

	public static void main(String[] args) {
//		String s = "110010101001";
//		String s = "01110";
		String s = "1111111";
		
		System.out.println(solution(s));
	}
	
	private static int[] solution(String s) {
		int[] answer = new int[2];  // [이진변환횟수, 제거된 모든 0의 개수]
		
		while(!s.equals("1")) {
			// 1. 0 제거하기 & 0 개수세기
			int x = s.length();  // 원래 s길이
			s = s.replaceAll("[^1-9]", "");  // 0 모두 제거
			answer[1] += x - s.length(); // 제거된 0의 개수 = 원래 길이 - 0을 제거한 문자열 길이
			
			// 2. 이진변환하기
			s = Integer.toBinaryString(s.length());  // 0을 제거한 x의 길이
			answer[0]++;  // 이진변환횟수 + 1;
		}
		
		return answer;
	}

}

 

 

❗ 결과

 

 

이진변환을 하기 위한 방법으로는

1️⃣ Integer.toString(변환할 정수, 2)

2️⃣ Integer.toBinaryString(변환할 정수)

위의 2가지 방법이 있다는 것을 알게되었다 😁

Comments