◇ 문제 설명
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'이 최소 하나 이상 포함되어 있습니다.
◇ 입출력 예시
| s | result |
| "110010101001" | [3, 8] |
| "01110" | [3, 3] |
| "1111111" | [4, 1] |
◇ 초기 내용
※ [출처] 프로그래머스-코딩테스트 연습-문제명
※ 초기 내용을 참고하여 문제에 맞는 코드를 작성하세요.
class Solution
{
public int solution(int [][]board)
{
int answer = 1234;
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("Hello Java");
return answer;
}
}
◇ 풀이 과정
문제의 풀이과정은 이러했다.
- s문자열에서 1의 개수를 찾는다.
- 찾은 1의 개수를 2진수로 변환하여 s에 저장한다.
- s의 길이에서 1의 개수를 뺀값을 answer[1]에 누적하여 저장한다.
- 위 1~3을 반복하며 반복횟수를 answer[0]에 저장한다.
◇ 참고 사항
첫번째, str.equals("문자열")
- 문자열을 비교하는 함수이다.
- 매개변수의 문자열이 str변수의 문자열과 같은지 각 요소를 비교한다.
- String형을 ==연산자를 이용하여 비교할 경우 각 문자열의 문자를 비교하는 것이 아닌, 메모리 공간을 비교한다.
class Solution { public int[] solution(String s) { int[] answer = new int[2]; //이 경우, s와 문자열 "1"의 주소는 다르므로 //무한반복이 실행됨 while(s!="1") { --생략-- } return answer; } }
두번째, Integer.toBinaryString(n)
- int형 n을 String형의 2진수로 변환하여 반환하는 메서드이다.
◇ 답안
더보기
더보기
class Solution {
public int[] solution(String s) {
//return값은 반복횟수, 0의 누적 개수를 배열로 만든 값이므로
//총 2개의 인덱스를 가지는 배열을 선언한다.
int[] answer = new int[2];
//s가 1이 아니면 아래 코드 실행
while(!s.equals("1")) {
//1의 개수를 셀 cnt변수 생성
int cnt = 0;
//s의 길이만큼 반복
for (int i = 0; i < s.length(); i++) {
//만약, s의 요소가 1이라면 cnt 1증가
if (s.charAt(i) == '1') {
cnt++;
}
}
//answer의 1번 인덱스에사는 0의 개수 누적합을 구하므로
//s의 전체 길이에서 1의 개수를 뺸수, 즉 0의 개수를 answer[1]에 저장한다.
answer[1] += (s.length()) - cnt;
//answer[0]은 반복 횟수를 세므로, while문이 끝날때마다 1증가한다.
answer[0]++;
//s의 값을 cnt를 2진수로 변환한 문자열로 변경한다.
s = Integer.toBinaryString(cnt);
}
return answer;
}
}
◇ 실행결과

◇ 출처
https://programmers.co.kr/learn/challenges
코딩테스트 연습
기초부터 차근차근, 직접 코드를 작성해 보세요.
programmers.co.kr
'코딩테스트 > Java' 카테고리의 다른 글
| [Level2] 방문길이 답안 및 풀이 (0) | 2021.12.31 |
|---|---|
| [Level2] 스킬트리 답안 및 풀이 (0) | 2021.12.30 |
| [Level2] 올바른 괄호 답안 및 풀이 (0) | 2021.12.28 |
| [Level2] 다음 큰 숫자 답안 및 풀이 (0) | 2021.12.27 |
| [Level2] 숫자의 표현 답안 및 풀이 (0) | 2021.12.26 |
댓글