하루를살자

[Swift] Binary Gap - Codability 본문

Algorithm Practices

[Swift] Binary Gap - Codability

Kai1996 2022. 6. 20. 23:12

문제

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

 

BinaryGap coding task - Learn to Code - Codility

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

app.codility.com

문제 이해

  • 인자 값으로 들어온 N 값을 이진수로 표현했을때, 1과 1 사이 최대 갭의 값을 반환하는 함수를 만들어라.
    ex) N = 1041, binary = 100000100001, 1과1 사이의 갭 값들: 5,4 -> 5 반환

문제 접근 과정

  1. N 값을 binary 로 계산
  2. binary gap 을 찾기 위해 1 이 들어 있는 인덱스 값을 이전 인덱스 값과 빼준다.
  3. 빼준 값들의 배열의 max 를 찾아 그 값에 -1 해서 반환. (배열의 길이가 1일시 0 반환)

func binaryGap( _ N: Int) -> Int {
    var binaryArray: [Int] = []
    var resultArray: [Int] = []
    var leftOver = N
    //binary 값 구하기 
    while leftOver > 0 {
        binaryArray.append(leftOver % 2)
        leftOver = leftOver / 2
    }
    // 1이 들어 있는 값의 인덱스를 빼옴
    binaryArray = binaryArray.enumerated().filter({$0.element == 1}).map({$0.offset})

    //배열 binaryArray 인덱스 i 와 i+1 값을 서로 빼주고, 그값을 resultArray 에 더함. 

    for i in 0..<binaryArray.count - 1 {
        resultArray.append(binaryArray[i+1] - binaryArray[i])
    }

    return resultArray.count < 1 ? 0 : resultArray.max()!-1
}

새로배운 swift 문법

  • enumerated() 과 고차 함수 의 사용.
    • Array.enumerated() -> (offset, element) -> .filter, map 적용
Comments