1. 문제 설명
0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다.
1. x의 모든 0을 제거합니다.
2. 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'이 최소 하나 이상 포함되어 있습니다.
2. 입출력 예
입출력 예
s | result |
"110010101001" | [3,8] |
"01110" |
[3,3] |
"1111111" | [4,1] |
3. 코드
<kotlin />
class Solution {
fun solution(s: String): IntArray {
var answer = intArrayOf(0,0)
var new = s
while(new != "1"){
answer[0]++
answer[1] += new.count{it=='0'}
new = new.replace("0", "").length.toString(2)
}
return answer
}
}
4. 풀이
문제의 조건대로 코드를 작성해주면 된다.
new 라는 변수가 "1"이 될 때까지, 계속 바꿔줘야하므로 while문을 통해 반복을 돌려준다.
answer의 첫번째 요소에는 반복인 한 횟수를 원한다고 했으니 반복문 내에서 한 번 돌때마다, 1을 증가시켜준다.
두번째 요소에는 바뀌면서의 0의 갯수를 알고 싶다고 하였으니 count메소드와 판별식을 주어 0의 개수를 파악시켜 계속 증가시켜준다.
매변 answer의 연산이 끝나면, 모든 0을 제거하기위해 replace 메소드를 통해 빈 문자로 치환하고, toString(num) 메소드를 통해 이진변환을 한다.
이 연산을 계속 수행하다 new == "1" 이되면 반복이 멈추고 결과가 나오게 된다.
5. 결과
안정적으로 통과한 것을 볼 수 있다.

'PS > programmers' 카테고리의 다른 글
[programmers][Kotlin] JadenCase 문자열 만들기 (0) | 2023.10.05 |
---|---|
[programmers][Kotlin] 개인정보 수집 유효 기간 (0) | 2023.09.22 |
[programmers] [Kotlin] 로또의 최고 순위와 최저 순위 (0) | 2023.09.21 |
[programmers] [Kotlin] 신규 아이디 추천 (0) | 2023.09.01 |
[programmers] [Kotlin] 키패드 누르기 (0) | 2023.08.31 |