티스토리 뷰
문제 설명
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 함수를 완성해주세요.
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/70129
제한 사항
- s의 길이는 1 이상 150,000 이하입니다.
- s에는 '1'이 최소 하나 이상 포함되어 있습니다.
입출력 예
소스 코드
class Solution {
public int[] solution(String s) {
int calcCount = 0;
int zeroCount = 0;
//재귀함수 호출
return binaryCalc(s, calcCount, zeroCount);
}
//재귀 메서드
private int[] binaryCalc(String s, int calcCount, int zeroCount) {
int[] result = {};
//zeroCount를 계산할 for문
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '0') {
zeroCount++;
}
}
//zeroCount를 계산했으니 제거 후 이진법 진행
String replaceStr = s.replace("0","");
int length = replaceStr.length();
//이진법 계산한 문자열
String binaryString = Integer.toBinaryString(length);
// 한번의 과정이 끝났으면 +1
calcCount += 1;
//만약 이진법으로 계산한 문자열이 "1"일 경우 result 반환(문제 요구 사항)
if (binaryString.equals("1")) {
result = new int[]{calcCount, zeroCount};
return result;
}
//해결될 때 까지 반복
return binaryCalc(binaryString, calcCount, zeroCount);
}
}
문제 풀이 과정
재귀함수를 사용해 풀어볼 생각을 하였다.
- 문자열 s 0의 갯수를 계산할 "zeroCount" 변수로 만듬
- 한번의 과정을 진행하면 +1 할 "calcCount" 변수로 만듬
- 재귀 함수 "binaryCalc" 호출
- "binaryCalc" 메서드 진행
- zeroCount 계산할 공식
- zeroCount 계산 후 calcCount+1
- 문자열 "s" 이진법으로 만듬
- 만약 문자열 "s"가 "1"일 경우 result 배열안에 calcCount, zeroCount를 채운 후 종료(문제 요구사항)
결과
'사견 > 알고리즘' 카테고리의 다른 글
[프로그래머스/Java] Level 2. 다음 큰 숫자 (0) | 2023.05.13 |
---|---|
[프로그래머스/Java] Level 2. 숫자의 표현 (0) | 2023.05.12 |
[Java] 더하기 사이클 (0) | 2022.07.02 |
[Java] 소수 구하기 (0) | 2022.06.30 |
[Java] ACM 호텔 (0) | 2022.06.30 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- vuex
- 맥 error
- JWT
- java 플레이그라운드
- 한권으로끝내기리눅스마스터2급
- CompositionAPI
- 책리뷰
- vue.js
- 함께모으기
- for
- LEVEL2
- script setup
- 짝지어제거하기
- Vue.js3
- mybatis구현
- pinia
- 객체지향
- 객체지향의 사실과 오해
- springboot
- 객체 지도
- 알고리즘
- it책 리뷰
- 정수형으로 변환
- SpringSecurity
- 다음 큰 숫자
- 리눅스마스터2급
- 토스페이먼츠
- 프로그래머스
- 스프링부트
- 타임리프
- Total
- Today
- Yesterday