본문 바로가기
알고리즘

[Swift 알고리즘] Codility lesson1 - BinaryGap

by 코코종 2022. 10. 12.
728x90

간만에 찾아온 코코종입니닷...

갓생을 살기로 마음먹어서... iOS, 코딩테스트, CS 공부를 하기로 마음먹은지 3일차입니당

 

코딜리티의 lesson을 다 swift로 풀어보려고 해서 그 첫삽을 떴답니다 ㅎㅎ..

 

해당 문제는 lesson1 - BinaryGap 에서 확인이 가능합니다.

간단하게 설명하면 주어진 Int N을 이진수로 바꾸고 이 중 1과 1사이에 있는 연속된 0의 최대 갯수를 구하는 문제입니다.

 

저는 Int N -> String 하는 메서드인 intToBinary()를 구현했습니다.

이후 해당 String을 forEach로 돌면서 0인지 1인지에 따라 tmp에 현재 연속된 0의 갯수를 저장했습니다.

1을 만나게되면 answer과 tmp값중 큰 값으로 answer를 갱신해주고 tmp를 0으로 초기화합니다.

처음에 풀때는 32의 경우(100000) 답이 0이 되어야하는데 이에 대한 처리를 못했습니다(문제를 잘 읽자..!)

public func solution(_ N : Int) -> Int {
    let binaryN = intToBinary(N)
    // print(binaryN)
    var answer = 0
    var tmp = 0
    binaryN.forEach {
        if $0 == "0" {
            tmp += 1
        } else {
            answer = max(answer, tmp)
            tmp = 0
        }
    }

    return answer
}

func intToBinary(_ N: Int) -> String {
    var n = N
    var strN = ""

    while n >= 2 {
        strN = String(n%2) + strN
        n = n/2
    }
    if n == 1 { strN = String(1) + strN}

    return strN
}

 

간단하지만 간만에 알고리즘 문제를 보니까 생각보다 시간이 걸리더라구여... 꾸준히 공부해보겠습니당 ><

728x90