Codility Lesson 1: Easy BinaryGap

yoogail·2022년 4월 28일
0

Algorithm

목록 보기
7/12
post-thumbnail

문제 분석

  • 10진수를 받아와 2진수로 변환한 뒤, 1과 1 사이에 있는 0의 갯수를 토대로 binary gap을 구한다.
  • 그후 가장 큰 binary 갭을 반환한다.
  • 단, binary gap이 없는 경우 0을 반환한다.
ex) 만약 주어진 숫자가 529라면?
  • 529를 2진수로 변환하면 1000010001
  • 여기에서 1과 1 사이의 binary gap은 2개이며, 가장 큰 binary gap의 값은 4이다.
  • 1 0000 1 000 1
ex) 만약 주어진 숫자가 32라면?

해결 과정

  1. 10진수 -> 2진수
  2. 배열에 넣기
  3. binary gap 구하기
    3-1. 첫 글자 외에 1이 없으면 return 0
    3-2. for문을 돌려서 1을을 발견하기 전까지의 0 더하기

solution

import Foundation

public func solution(_ N : Int) -> Int {
    // 1. 10진수 -> 2진수
    let binary = String(N, radix: 2)
    // 2. 배열에 넣기
    var array = Array(binary)
    array.removeFirst()
    
    // 3-1. 첫 글자 외에 1이 없으면 return 0
    let index = array.index(of: "1")
    if index == nil {
        return 0
    }
    
    // 3-2. for문을 돌려서 1을을 발견하기 전까지의 0 더하기
    print("binary gap이 있긴 함")
    var count = 0
    var max = 0
    
    for i in array {
        if i == "0" {
            count += 1
        } else {
            max = max > count ? max : count
            count = 0
            print("max는 ", max)
        }
    }
    return max
}

다른 방법은?

  • "1" 이 있는 곳의 인덱스를 받아서 그 차이로 binary gap의 최대값을 구한다.
  • ...

🔖 출처

profile
🍫 iOS 🍫 Swift

0개의 댓글