적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Algorithm/Codility

[Swift 알고리즘] Codility: BinaryGap

hongssup_ 2022. 5. 21. 00:29
반응형

https://app.codility.com/programmers/lessons/1-iterations/binary_gap/

 

Lesson 1 Iterations (Easy)

BinaryGap

Find longest sequence of zeros in binary representation of an integer.

처음 풀어보는 Codility 문제. 영어로 되어 있어 당황스러웠지만, 크게 어렵진 않았다. 

Swift언어는 Swift4 로 지원이 되는듯..?

 

주어진 양의 정수 N을 이진수로 변환했을 때, 1과 1로 둘러싸인 연속된 0의 갯수 중 최대값을 반환하는 문제. 

 

입출력 예시

print(solution(9)) //1001 => 2
print(solution(529)) //1000010001 => 4
print(solution(20)) //10100 => 1
print(solution(15)) //1111 => 0
print(solution(32)) //100000 => 0

내 답안

import Foundation

public func solution(_ N : Int) -> Int {
    let n = String(N, radix: 2)  //2진수 변환
    var zeroCnt = 0  //연속된 0의 갯수 세는 변수
    var zeroLen = [Int]()  //binary gap의 길이를 담는 배열
    for i in n {  
        if i == "0" { zeroCnt += 1 }  
        else {
            if zeroCnt == 0 { continue }
            zeroLen.append(zeroCnt)
            zeroCnt = 0
        }
    }
    return zeroLen.max() ?? 0  //binary gap 길이 중 최대값 반환
}

이진수 문자열을 반복문 돌려 0이면 zeroCnt +1 해주고, 1이면 배열에 zeroCnt를 담도록 했다.

binary gap이 존재할 경우, 배열에 그 길이를 담아 최대값을 반환해주었다. 

결과 나오는데 신기하다. 문제 푸는 과정 녹화하는 것처럼 타임라인도 보여주더라. 

Xcode에서 풀고 복붙했는데... ㅎ

728x90
반응형

'Algorithm > Codility' 카테고리의 다른 글

[Swift 알고리즘] Codility demo task  (0) 2023.01.04
[Swift 알고리즘] Codility: CyclicRotation  (0) 2022.05.23