본문 바로가기
Problem Solving

[Swift] 프로그래머스 이진 변환 반복하기(lv. 2)

by DuncanKim 2023. 3. 2.
728x90

[Swift] 프로그래머스 이진 변환 반복하기(lv. 2)

 

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/70129

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

2. 접근

반복의 횟수는 모르겠지만, 주어진 조건 1, 2 대로 계속 숫자를 깎아서 결국 "1"이 될 때 까지 내부의 반복문을 몇 번을 거쳤는지만 파악하면 된다. 

 

while문을 활용하여 없어진 0의 개수를 count 하여 누적합 처리하고, 필터를 사용하여 "1"로만 구성되게 한 다음, 그 문자열의 길이를 다시 이진수로 변환하는 과정을 거친다. 이진수로 변환을 할 경우 loopCount, 즉 이진변환의 횟수를 그 때 1 더해주면 될 것이다.

 

마지막으로 리턴하는 값은 [loopCount, zeroCount]로 해서 답을 출력해준다.

 

3. 코드

import Foundation

func solution(_ s:String) -> [Int] {
    var loopCount = 0
    var zeroCount = 0
    var innerS = s
    while innerS != "1" {
        zeroCount += innerS.filter({ $0 == "0" }).count
        innerS = innerS.filter({ $0 == "1" })
        innerS = String(innerS.count, radix: 2)
        loopCount += 1
    }
    return [loopCount, zeroCount]
}
728x90

댓글