이진수 관련한 문제도 자주 출제 된다.
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;
더 쉽게 풀 수있는데 당장 풀려고 하면 또 돌아가야 하니.. 성격급한 나로썬 차근차근히 하기가 어렵.