728x90
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
x = 0111010
1. x의 모든 0 제거하기 > 1111
2. x의 길이인 c를 2진법으로 표현하기 > c=x.length 4 > 4를 이진수로 100
3.1 될때까지 반복
=> 2진 변환의 횟수, 제거된 모든 0의 개수를 배열에 담아 리턴
#예시
01110
0제거 2개, 111, 길이 3 > 이진법 11
0제거 0개, 11, 길이 2 > 이진법 10
0제거 1개, 1, 길이 1 > 종료
3, 3 리턴
#이진법 변환 코드
Java의 Integer.toBinaryString() 함수로 바로 이진법 변환이 가능하긴함.
아래 코드는 직접 이진법 변환하는 자바 함수
>2진수 구하는 법

static String toBinary(int n) {
StringBuilder sb = new StringBuilder();
while (n > 0) {
sb.append(n % 2); // 나머지
n /= 2; // 몫
}
return sb.reverse().toString();
}
*StringBuilder의 길이 구하는 법 : 그냥 String처럼 sb.length()하면 됨
*StringBuilder가 "1"인지 비교하는 법 : sb.charAt(0) == '1'
*StringBuilder 비우는 법 : sb.setLength(0);
-정답 코드
class Solution {
public int[] solution(String s) {
int[] answer = {};
StringBuilder sb = new StringBuilder(); // 0제거하고 문자열 붙이기
int bnum = 0; // 이진변환 횟수 저장
int zero = 0; // 0 제거한 횟수 저장
// 1 될때까지 반복
while(!s.equals("1")){
bnum++;
sb.setLength(0); // sb 비우고 시작
// 0제거하기
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
if(c == '1'){
sb.append(c);
}
else{
// 제거한 0 개수 저장
zero++;
}
} //for문 종료
// 길이 구하기
int l = sb.length();
// 이진수 변환하기
s = Integer.toBinaryString(l);
} //while문 종료
answer = new int[]{bnum, zero};
return answer;
}
}'Algorithm > Programmers' 카테고리의 다른 글
| 💚[Lv.2] 짝지어 제거하기 : Java (0) | 2026.01.30 |
|---|---|
| [Lv.2] 다음 큰 숫자 : Java (0) | 2026.01.30 |
| [Lv.2] JadenCase 문자열 만들기 : Java (0) | 2026.01.28 |
| [Lv.1] k번째 수 : Java (0) | 2025.12.14 |
| [Lv.2] 전화번호 목록 : Java (0) | 2025.12.13 |