728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/70129
풀이
쉬운 문제임
근데 보니까 전에도 풀었더라고 ㅎㅎ
문제 잘 읽고 그대로 풀면 됨
다 풀고 전에 풀었던 코드 보니까
s = s.replace("0", "");
이렇게 문자열 함수 사용했던데 이렇게 하는게 시간도 더 빠르고 코드 길이도 짧을 듯함 !
자세한건 주석으로 !
코드
// 코딩테스트 연습 - 월간 코드 챌린지 시즌1 - 이진 변환 반복하기
// https://programmers.co.kr/learn/courses/30/lessons/70129
package PROGRAMMERS.level2;
import java.util.Arrays;
public class Num70129_이진변환반복하기2 {
private static class Solution {
private int[] solution(String s) {
int transCount = 0; // 변환 횟수
int totalZeroCount = 0; // 총 제거한 0 횟수
while (!s.equals("1")) { // s가 1이면 변환 멈추기
transCount++;
int zeroCount = countZero(s);
if (zeroCount == 0) { // zeroCount가 0이면
s = Integer.toBinaryString(s.length()); // s의 길이를 이진수로 변환
} else { // 아니면
totalZeroCount += zeroCount;
s = Integer.toBinaryString(s.length() - zeroCount); // (s의 길이 - 0의 개수)를 변환
}
}
return new int[]{transCount, totalZeroCount};
}
// s에서 0의 개수 세기
private static int countZero(String s) {
int zeroCount = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '0') {
zeroCount++;
}
}
return zeroCount;
}
public static void main(String[] args) {
Solution sol = new Solution();
System.out.println(Arrays.toString(sol.solution("110010101001")));
System.out.println(Arrays.toString(sol.solution("01110")));
System.out.println(Arrays.toString(sol.solution("1111111")));
}
}
}
728x90