아무고토 몰라효
[프로그래머스] 이진 변환 반복하기 본문
반응형
문제
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 함수를 완성해주세요.
Constraints:
- s의 길이는 1 이상 150,000 이하입니다.
- s에는 '1'이 최소 하나 이상 포함되어 있습니다.
고민
반복문을 돌아야하니, 반복문의 조건은 s가 "1"이 될 때까지
로 하면 되고
"0"을 제거하고 난 다음의 binary string 을 반복해서 "0"을 제거하고 count 처리만 하면 되는 간단한 문제이다.
해결
class Solution {
fun solution(s: String): IntArray {
var answer: IntArray = intArrayOf()
var count = 0
var removeCount = 0
var binaryStr = s
while(binaryStr != "1") {
val onesOnly = binaryStr.replace("0", "")
removeCount += binaryStr.length - onesOnly.length
binaryStr = Integer.toBinaryString(onesOnly.length)
count++
}
answer = intArrayOf(count, removeCount)
return answer
}
}
사실 Integer.toBinaryString()
함수는 찾아봤다. (평소에 쓸일이 없었음......ㅠ)
나머지는 내가 고민한 내용 그대로 코드를 작성했다.
결과
반응형
'Coding Test' 카테고리의 다른 글
[프로그래머스] JadenCase 문자열 만들기 (1) | 2025.08.04 |
---|---|
[LeetCode] Add Strings (2) | 2025.08.04 |
[LeetCode] Is Subsequence (1) | 2025.07.18 |
[LeetCode] Find the Difference (1) | 2025.07.15 |
[LeetCode] Reverse String (3) | 2025.07.15 |
Comments