문제
풀이
입력값에서 0을 제거하고
-> 0 제거 후 길이를 다시 이진변환
-> 이진변환한 수에서 다시 0을 제거
-> 0 제거 후 길이를 다시 이진변환
하는 것을 반복해서 이진변환 결과가 1이 될 때까지 반복해야한다.
출력값으로는 [{총 반복 횟수}, {제거한 0의 개수}] 를 출력해야한다.
변수 설명
- len : 0 제거후 길이
- zero : 제거한 0의 개수 카운터
- count : 반복 횟수 카운터
풀이 순서
class Solution {
static int zero = 0;
static int count = 0;
public int[] solution(String s) {
convert(s);
int[] answer = {count, zero};
return answer;
}
private void convert(String s) {
count ++;
int len = 0;
for (char c: s.toCharArray()){
if (c == '1') len ++; // 0 제거후 길이
else zero++; // 제거할 0의 개수
}
if (len == 1) return; // 이진 변환 결과 1이면 종료
s = Integer.toBinaryString(len); // 2진수 변환 함수
convert(s); // 재귀함수
}
}
solution 함수
convert 함수를 호출하고 함수가 종료되면 카운터 값인 count와 zero를 반환해준다.
convert 함수
1. 입력값을 toCharArray()로 하나하나 순회한다.
2. 문제에서 0 제거후 길이를 다시 이진변환해야하는데, 이는 1의 개수와 똑같으므로 값이 1일 경우에 `len`을 증가시켜준다.
3. 제거한 0의 개수를 출력해줘야하므로, 입력값이 1이 아니면 `zero`를 증가시켜준다.
4. 이 때 이진변환 결과가 1이 될 때는 len이 1인 경우이므로 이 경우에 함수를 종료시켜준다.
5. len을 다시 이진변환해줘야 하는데, 이 때 `Integer.toBinaryString(len)` 을 써서 이진변환 해줬다.
6. 변환값을 convert 함수에 넣어서 재귀호출 해준다. 함수 호출시 `count`를 증가시킨다.
'코딩 테스트 > 자바' 카테고리의 다른 글
[프로그래머스 / 자바 / Lv.3] 43105 정수 삼각형 (5) | 2024.07.24 |
---|---|
[프로그래머스 / 자바 / Lv.2] 12924 숫자의 표현 (1) | 2024.07.23 |
[프로그래머스 / 자바 / Lv.3] 42628 이중우선순위큐 (1) | 2024.07.22 |
[프로그래머스 / 자바 / Lv.2] 12941 최솟값 만들기 (0) | 2024.07.11 |
[프로그래머스 / 자바 / Lv.2] 12939 최댓값과 최솟값 (0) | 2024.07.10 |