import java.util.Arrays;
class Solution {
public int[] solution(String s) {
int[] answer = {0,0};
// stream은 상수 혹은 그에 준하는값에만 대입 가능해서 final 배열 선언
final String[] strArr = {s};
int excuCnt=0;
final int[] zeroCnt = {0};
// 1이 될때까지 반복
while (!strArr[0].equals("1")) {
excuCnt++;
String[] tempstr={""};
// 0을 제거하며 카운트 올리고 1만 tempstr에 담는다.
Arrays.stream(strArr[0].split("")).forEach(a -> {
if (a.equals("0")) { zeroCnt[0]++; }
else { tempstr[0] += "1"; }
});
// 길이를 2진수로 변환 후 String으로 반환하는 메서드
strArr[0] = Integer.toBinaryString(tempstr[0].length());
}
answer[0]=excuCnt;
answer[1]=zeroCnt[0];
return answer;
}
}
이전에 올렸던 것 처럼 stream은 상수 혹은 그에 준하는값에만 대입 가능해서 위와 같이 배열에 굳이굳이 대입해서 사용했다.
10진수를 2진수으로 변환하는 메서드가 있을 것 같아 찾아보니,
10진수를 2진수로 바꾼 뒤 String으로 반환하는 Integer.toBinaryString() 가 있어서 사용했다.
class Solution {
public int[] solution(String s) {
int[] answer = new int[2];
int temp;
while( !s.equals("1") ) {
answer[1] += s.length();
s = s.replaceAll("0", "");
temp = s.length();
s = Integer.toBinaryString(temp);
//System.out.println("s : " + s );
answer[0]++;
answer[1] -= temp;
}
return answer;
}
}
생각해보니 split을 하지 안고 바로 replaceAll()을 사용했다면 0을 제거할 수 있었을텐데!
이걸 생각해내지 못하다니 아쉽다.