< 내 풀이 >
class Solution {
static int removeNum=0;
static String remove_0(String s){ //0을 제거하는 함수
String str="";
for(int i=0;i<s.length();i++){
if(s.charAt(i)!='0')
str+=s.charAt(i);
else
removeNum++; //제거하는 0의 개수 증가
}
return str;
}
public int[] solution(String s) {
int count=0;
while(!s.equals("1")){
s=remove_0(s); // 0을 제거
s= Integer.toBinaryString(s.length());
count++; //이진 변환의 횟수
}
int[] answer = {count,removeNum};
return answer;
}
}
✏️ 풀이 방법
- 문자열 s가 "1" 이 될 때까지 반복문을 돈다.
: 0을 제거하는 함수 실행 ( 제거하는 0의 개수 증가 )
: 0을 제거하고 난 문자열의 길이를 이진수로 변환
: 이진 변환의 횟수 증가
- { 이진 변환의 횟수, 제거한 0의 개수 } return
< 다른 사람의 풀이 >
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);
answer[0]++; // 이진 변환의 횟수
answer[1] -= temp; // 제거한 0의 개수
}
return answer;
}
}
=> 위의 풀이에서 replaceAll 을 사용해 0을 없애주는 방법이 똑똑한 것 같다. 나는 0을 제거하는 함수를 만들어서 코딩을 했는데, 다음에 비슷한 문제를 풀게 된다면 위의 방식을 따라해야겠다.
< 추가 : 10진수 ➡️ 2진수 구현 >
int n = 2; //2진수 예시
int num10 = 256; //10진수
String numStr = ""; //n진수 문자열
while(num10 > 0){
numStr = String.valueOf(num10%n) + numStr; // numStr을 뒤에 붙여주는 것 중요!!!!!
num10 /= n;
}
System.out.println(numStr); //2진수 100000000
✍🏻 느낀점
나는 10진수를 2진수로 바꿔주는 내장함수가 있는지 몰랐다. 왜 처음 알았지? 당연히 2진수로 바꿔주는 함수를 코딩할 생각을 했는데, 이번에 이 문제를 통해 알게 돼서 다행이다. 자주 필요할 때마다 써먹어야지.
참고 블로그
https://morethan-hmj0507.vercel.app/BinaryToDecimal
[Java] 기수 변환(e.g. 10진수 ↔ 2진수 변환)
기수 변환
morethan-hmj0507.vercel.app
https://hianna.tistory.com/527
[Java] 10진수 <-> 2진수, 8진수, 16진수로 변환하기
10진수 -> 2진수, 8진수, 16진수로 변환하기 java.lang.Integer의 toBinaryString(), toOctalString(), toHexaString() 메소드를 이용하여 10진수를 2진수, 8진수, 16진수 문자열로 변환할 수 있습니다. 리턴 타입 클래스
hianna.tistory.com
'코딩테스트 > Programmers' 카테고리의 다른 글
[JAVA] 다음 큰 숫자 (0) | 2024.04.22 |
---|---|
[JAVA] 숫자의 표현 (1) | 2024.04.20 |
[JAVA] JadenCase 문자열 만들기 (1) | 2024.04.18 |
[JAVA] 최솟값 만들기 (0) | 2024.04.17 |
[JAVA] 올바른 괄호 (0) | 2024.04.17 |