코딩테스트문제풀이/Codility

Codility Lesson 1. BinaryGap (Swift)

라니킴 2023. 3. 31. 15:37

BinaryGap

정수를 2인수로 표현했을 때 양 쪽 끝이 1로 둘러싸인 연속적인 0의 길이의 최대값을 리턴하는 문제

 

# 문제풀이

주어진 정수를 binary로 표현한 후 1과 1사이의 0의 개수를 카운트한다.

1과 1 사이의 0만 카운트 하기 때문에 1이 하나인 경우에는 0을 return 해준다.

첫번째 1과 마지막 1 사이의 string 값을 구하고 1을 경계로 0의 개수를 카운트한 결과를 가진 배열로 리턴한다.

그 중 max 값을 답으로 도출한다.

 

# 코드

public func solution(_ N : Int) -> Int {
    // Implement your solution here

    let binaryNum = String(N, radix: 2)

    guard let oneFirstIndex = binaryNum.firstIndex(where: {$0 == "1"}) else {
        return 0
    }
    
    guard let oneLastIndex = binaryNum.lastIndex(where: { $0 == "1"}) else {
        return 0
    }
    
    if oneLastIndex == oneFirstIndex {
        return 0
    }
    
    let oneToOne = binaryNum[oneFirstIndex...oneLastIndex]
    
    let zeroCountArray = oneToOne.split(separator: "1").filter {
        Int($0) != nil
    }.map {$0.count}
    
    var count = 0
    if let max = zeroCountArray.max(){
        count = max
    }
    
    return count
}