본문 바로가기
Algorithm/Programmers

[Algorithm/Programmers] 다음 큰 숫자 Swift

by thoonk: 2021. 1. 15.

다음 큰 숫자 Level2

 

문제 풀이:

1.  주어진 숫자(n)를 2진법으로 바꿔서 1의 숫자 개수를 구한다. 

2. n에 1을 더한 값(next)을 2진법으로 바꿔서 1의 숫자 개수를 구한다. 

3. 1번과 2번을 비교하면서 숫자가 같을 경우 next값을 리턴한다. 

4. 같지 않다면 next에 1을 더해준다.

5. 1-4번까지 무한 반복

 

코드: 

import Foundation

func solution(_ n:Int) -> Int
{
    var next = n+1
    
    while true {
        if checkBinary(n) == checkBinary(next) {
            return next
        }
        next += 1
    }
}

func checkBinary(_ n: Int) -> Int {
    let s = String(n, radix: 2)
    return s.filter { $0 == "1"}.count
}

다른 분의 풀이:

import Foundation

func solution(_ n:Int) -> Int {
    var answer : Int = n + 1

    while true {
        if n.nonzeroBitCount == answer.nonzeroBitCount {
            break;
        }
        answer += 1
    }

    return answer
}

 

이 코드를 보고 nonzeroBitCount 프로퍼티를 처음 알게 되었는데 숫자를 bit로 나타냈을 때 1의 개수를 세주는 프로퍼티이다.

 

문제: 

programmers.co.kr/learn/courses/30/lessons/12911

 

코딩테스트 연습 - 다음 큰 숫자

자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니

programmers.co.kr

 

댓글