티스토리 뷰
더보기
문제
0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다.
- x의 모든 0을 제거합니다.
- x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다.
예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다.
0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
- s의 길이는 1 이상 150,000 이하입니다.
- s에는 '1'이 최소 하나 이상 포함되어 있습니다.
문제를 보고 이진수..? 계산을 내가 구현해야 하는 건가? 싶었는데 다행히도 함수가 있더군요!
안도하며 알고리즘부터 짜줬습니다..
1. 문자열 나누기
2. 제거할 0의 개수와 회차 기록을 위한 변수 선언
3. str 이진 변환 시작⬇️
3-1. 0의 개수 파악
3-2. str에서 0 제거
더보기
0을 제거하는 걸 리스트로 변환 -> .remove()로 0 지우기 vs 필터 사용해서 하기 중 고민하다가 아직 낯선 filter를 사용해보았습니다.
str = Arrays.stream(str) //str에서
.filter(out -> !out.equals("0")) //out이 "0"이 아닌 것들을 모아
.toArray(String[] ::new); //다시 String[] str로 생성한다
3-3. 0이 제거되고 생긴 새로운 str의 길이 파악
3-4. 이진수로 변경
더보기
이진수로 변경하는 건 생각보다 간단하더라구요.
String s = Integer.toBinaryString(int num);
이렇게 하면 이진수로 변환된 값이 s에 저장됩니다.
3-5. 라운드 +1
4. str의 길이가 1이 될 때까지 반복
코드 전문입니다.
import java.util.*;
import java.util.stream.*;
class Solution {
public int[] solution(String s) {
int zeroCnt = 0;
int round = 0;
while(true){
String[] str = s.split("");
if(str.length == 1) break;
for(String zero : str){
if(zero.equals("0")) zeroCnt++;
}
str = Arrays.stream(str)
.filter(out -> !out.equals("0"))
.toArray(String[] ::new);
s = Integer.toBinaryString(str.length);
round ++;
}
int[] answer = {round, zeroCnt};
return answer;
}
}

꺅 거의 처음으로 한번에 성공해서 기분이 좋습니다ㅎㅎ
'공부하기 > 코딩테스트' 카테고리의 다른 글
| [프로그래머스] 카펫 (0) | 2025.11.11 |
|---|---|
| [프로그래머스] 피보나치 수 (0) | 2025.11.11 |
| [프로그래머스] 짝지어 제거하기 (stack) (0) | 2025.11.06 |
| [프로그래머스] 다음 큰 숫자 (0) | 2025.11.06 |
| [프로그래머스] JadenCase 문자열 만들기 isUpperCase(), toUpperCase(), toLowerCase() (0) | 2025.11.04 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 안드로이드
- 깃허브
- 프로그래머스
- 멋쟁이사자처럼안드로이드6기
- github
- 미래내일일경험
- 멋쟁이사자처럼6기안드로이드
- githubreadme
- toast
- vscode
- 라디오그룹
- 리드미
- 안드로이드스튜디오 #윈도우사용자추가 #코틀린 #인프런코틀린강의
- BoundService
- 미래내일일경험인턴
- 대소문자변경
- it직무
- 개린이
- androidstudio
- vscode+kotlin
- 라디오버튼
- 자바
- 인턴
- jadencase
- 자바대소문자여부
- readme
- 자바대소문자변경
- setOnClickListener
- kotlin
- onclicklistener
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함
