코딜리티의 문제들은 무단 복제, 전재와 공개가 금지되어 있습니다. 때문에 문제의 개요와 제 코드만을 공개합니다.
풀이는 스위프트로 진행하였습니다.
문제의 개요
binary gap이라는 개념을 가지고 시작하는 문제입니다. 입력 값으로 Int 정수가 주어지며 범위는 1부터 2,147,483,647입니다.
주어지는 10진수의 최대 바이너리 갭을 찾으면 됩니다.
자세한 내용은 Codility를 참고하시면 이해 가능합니다.
해답
let N = Int(readLine()!)!
var cnt = 0
var array: [Int] = []
var result: [Int] = []
public func solution(_ N: Int) -> Int {
var tmp = N
while true {
if tmp < 2 {
array.append(tmp)
break
}
if tmp % 2 == 0 {
array.append(0)
tmp = tmp / 2
} else {
array.append(1)
tmp = tmp / 2
}
}
array = array.reversed()
for num in array {
if num == 1{
if cnt > 0 {
result.append(cnt)
cnt = 0
}
}
if num == 0 {
cnt += 1
}
}
if result.isEmpty {
return 0
} else {
return result.max()!
}
}
간단한 문제였습니다. 이진수를 구하고 이를 하나씩 거슬러 올라가며 0과 1일 경우에 갭을 세고 가장 큰 갭을 리턴하면 풀립니다.

중간에 딴짓만 안 했어도 20분 안에 가능했을듯..
'Algorithm > Cordiality' 카테고리의 다른 글
| [Codility] Lesson 2) OddOcurrencesInArray (0) | 2022.07.24 |
|---|---|
| [Codility] Lesson 2) CyclicRotation (0) | 2022.07.23 |