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
}