본문 바로가기

Algorithm/Leetcode

매일 LeetCode 풀기 | Number of 1 bits

 

Write a function that takes the binary representation of a positive integer and returns the number of 
set bits
 
it has (also known as the
 
Hamming weight
).

 
Example 1:
Input: n = 11Output: 3Explanation:The input binary string 1011 has a total of three set bits.
Example 2:
Input: n = 128Output: 1Explanation:The input binary string 10000000 has a total of one set bit.
Example 3:
Input: n = 2147483645Output: 30Explanation:The input binary string 1111111111111111111111111111101 has a total of thirty set bits.
 
Constraints:
1 <= n <= 231 - 1

 

처음 접근 방식

class Solution {
    func hammingWeight(_ n: Int) -> Int {
        let answer = String(n, radix: 2)
        let arrayAnswer = Array(answer)
        var total = 0

        for item in arrayAnswer {
            if item == "1" {
                total += 1
            }
        }
        return total
    }
}

 

더 간단한 접근 

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

 

나는 고차함수를 적용하는 것에 약한 것 같다. 간단히 filter를 사용하면 될 것을, 반복문을 돌리는 방식으로 접근했다. 그리고 10진수를 다른 진수로 바꾸는 radix 를 배웠다.