본문 바로가기
코딩 테스트/프로그래머스

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

by Dev.Andy 2023. 4. 28.

📌 문제

프로그래머스 문제 이미지 - 이진 변환 반복하기

코딩테스트 연습 - 이진 변환 반복하기 | 프로그래머스 스쿨

 

📌 풀이

(1) 문자열에서 특정 문자 제거 - filter 메서드

filter(_:) | Apple Developer Documentation

filter와 클로저를 활용하여 "0"만 제거할 수 있도록 했다.

var binaryString = "0101001011" // "110010101001"
binaryString.filter { $0 != "0"} // "111111"

 

(2) 이진법 변환 - radix 이니셜라이저

init(_:radix:) | Apple Developer Documentation

형 변환 메서드 String()에 radix 이니셜라이저를 넣어 해당 진법에 맞게 반환할 수 있도록 했다.

String(4, radix: 2) // "100"

 

📌 코드

import Foundation

func solution(_ s:String) -> [Int] {
    // 반환할 결괏값의 요소를 할당
    var binaryConvertCount = 0
    var deleteZeroCount = 0
    
    // 함수의 매개변수를 변수로 할당
    var binaryString = s
    
    // 이진수가 1이 될 때까지 반복
    while (binaryString != "1") {

        // 이진수의 모든 0을 제거하여 제거된 새 변수에 할당
        let convertString = binaryString.filter{ $0 != "0" }
        
        // 제거된 모든 0의 개수를 count
        deleteZeroCount += binaryString.count - convertString.count
        
        // convertString 길이에 해당하는 이진수를 문자열로 변환하여 이진수에 다시 할당
        binaryString = String(convertString.count, radix: 2)
                
        // 이진 변환 횟수 count
        binaryConvertCount += 1
    }
    
    // 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 할당
    return [binaryConvertCount, deleteZeroCount]
}

 

댓글