728x90
[Swift] 프로그래머스 이진 변환 반복하기(lv. 2)
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/70129
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
'Problem Solving' 카테고리의 다른 글
[Swift] 프로그래머스 다음 큰 숫자(lv. 2) (0) | 2023.03.06 |
---|---|
[Swift] 프로그래머스 피보나치 수(lv. 2) (0) | 2023.03.03 |
[Swift] 프로그래머스 올바른 괄호(lv. 2) (0) | 2023.03.01 |
[Swift] 프로그래머스 최솟값 만들기(lv. 2) (0) | 2023.02.28 |
[Swift] 프로그래머스 JadenCase 문자열 만들기(lv. 2) (2) | 2023.02.27 |
댓글