0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다.
예를 들어, x = "0111010"
이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100"
이 됩니다.
0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요.
s | result |
---|---|
"110010101001" | [3,8] |
"01110" | [3,3] |
"1111111" | [4,1] |
문제를 풀면서 방심했던 부분은 문제 설명에 2번에 있었던, x길이를 2진법으로 표현한 문자열
로 표현한 문자열로 바꿔야 했다는 부분이다.
나는 문제를 제대로 보지 못하고, x의 모든 0을 제거한 문자열 자체
에서 2진 변환을 시도해서... 숫자가 굉장히 길어지면서 꽤나 수고를 했다.
문제 자체는 간단해 보이지만, 10진수를 2진수로 변환하는 방식을 알지 못하면 검색이 필요했을 것 같다!
int number = 100;
//10진수 -> 2진수
String binary = Integer.toBinaryString(number);
//10진수 -> 8진수
String octal = Integer.toOctalString(number);
//10진수 -> 16진수
String hexaDemical = Integer.toHexString(number)';
parseInt(String s, int radix)
을 이용하기
문자열(s)을 변환할 진수(radix)로 읽어서 int로 반환한다
//2진수 -> 10진수
int binary = Integer.parseInt("1010",2);
//8진수 -> 10진수
int octal = Integer.parseInt("12", 8);
//16진수 -> 10진수
int hexaDemical = Integer.parseInt("A", 16);
class Solution {
public int[] solution(String s) {
int[] answer = {0, 0}; //정답 배열 선언
while (!s.equals("1")) {
int before = s.length(); //0을 제거하기 전 길이
s = s.replaceAll("0", ""); //0 제거
int after = s.length(); //0을 제거한 후 길이
answer[1] += before - after; //제거한 0의 개수 저장
s = Integer.toBinaryString(after); //2진 변환
answer[0]++; //2진 변환한 횟수 증가
}
return answer;
}
}
메모리 : 83.7 MB
시간 : 27.77 ms
최근 레벨 2 문제들을 풀기 시작했는데, 기본이 탄탄하지 않으면 푸는 데 쉽지 않은 것 같다! 문제를 풀면서 기본을 다지는 시간을 가져야겠다 🫡