코딩테스트문제풀이/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
}