프로그래머스- 44

김정현·2023년 6월 15일
0

프로그래머스

목록 보기
44/46

간단히 말해서
0을 모두 제거 -> 제거 한 후 길이를 이진법으로 변환 -> 0제거
위 과정을 s=1 이 될때까지 반복한다.

그렇게 [반복 횟수, 제거한 0의 갯수] 를 리턴하면 해결된다.

repeat - while을 통한 반복문을 통해 해결하고자 한다.

우선 String(a, radix: x) 로 x진법 숫자로 변환할 수 있다는 것을 알게 되었다.

import Foundation

func solution(_ s: String) -> [Int] {
    var S = s
    var count = 0
    var zeroCount = 0
    
    repeat {
        count += 1
    
        let removedZeroCount = S.filter { $0 == "0" }.count
        zeroCount += removedZeroCount
        S = S.replacingOccurrences(of: "0", with: "")
        
        let c = S.count
        S = String(c, radix: 2)
        
    } while S != "1"
    
    return [count, zeroCount]
}

물론 한번에 적어내린 것은 아니었지만 비교적 쉽게 해결한 것 같았다.
처음 문제를 풀때 구조를 파악한 후, 처음 써보는 repeat while문을 쓰기로 결정한 것이 핵심이었다.

다른사람의 풀이는

import Foundation

func solution(_ s: String) -> Array<Int> {
    var copiedS = s
    var removedZero = 0
    var count = 0

    while copiedS != "1" {
        removedZero += copiedS.replacingOccurrences(of: "1", with: "").count
        copiedS = String(copiedS.replacingOccurrences(of: "0", with: "").count, radix: 2)
        count += 1
    }
    return [count, removedZero]
}

이런식으로 그냥 while문으로 해결하기도 하였다. 거의 똑같은거 같다. 그래도 repeat라는 단어가 들어있어서 복잡한 코드에서는 더 간단하게 구조를 파악할 수 있을거 같다.

0개의 댓글