Algorithm💡
[progammers]이진 변환 반복하기
성실농장주
2023. 9. 20. 21:10
2진수 문자열이 입력으로 들어왔을때, 문제에서는 0을 제거하고 1의 길이를 다시 2진수를 변환하여 앞에 단계를 반복해서 수가 1이 될때까지 반복하고 반복한 수와 제거된 총 0의 갯수를 배열 형태로 변환하는 문제입니다.
2진수 입력 -> 0의 갯수 카운트 -> 1의 갯수 카운트 -> 1의 갯수 2진수로 변환 -> 앞에 단계들 반복
이런 프로세스를 재귀함수로 구현하였습니다.
import Foundation
func convert(_ s:String, _ listZero:inout [Int]){
var numOfZero = Int()
var numOfOne = Int()
//입력 받은 문자열이 1인 경우 함수 탈출
if(s == "1"){return}
for c in s{
if(c == "0"){numOfZero += 1} //0의 갯수
else{numOfOne += 1} //1의 갯수
}
listZero[0] += 1
listZero[1] += numOfZero
//1의 길이가 1이 아닌 경우에
if(numOfOne != 1){
//1의 길이를 2진수로 변환, 결과를 반환할 배열을 전달
return convert(String(numOfOne,radix: 2), &listZero)
}
}
func solution(_ s:String) -> [Int] {
var result = [0,0]
convert(s, &result)
return result
}