이진 변환 반복하기
문제정의
문자열 x에 대한 이진변환을 1이 될 때까지 시행한다. 이진 변환은 아래와 같이 정의한다. 1. x의 모든 0을 제거한다. 2. x의 길이를 c라 하면, x를 c를 2진법으로 표현한 문자열로 바꾼다.
시행 뒤에 시행 횟수와 제거된 0의 개수를 반환하면 된다.
문제풀이
전체 코드는 다음과 같다. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22package level2;
public class RepeatBinary {
//프로그래머스 문제풀이 level2 이진 변환 반복하기
public static void main(String[] args) {
String s = "110010101001";
int[] answer = new int[2];
int cnt = 0, l, zero = 0;
while(!s.equals("1"))
{
cnt++;
l = s.length();
s = s.replace("0", "");
zero += l - s.length();
s = Integer.toBinaryString(s.length());
}
answer[0] = cnt;
answer[1] = zero;
}
}
시간복잡도를 정하기엔 애매한 부분이 있다. 0이 몇개나 생길지 모르기 때문에 절대적으로 얼마나 n이 커질지 단정짓기가 힘들다. 더 공부가 필요하다.