Home Number Complement
Post
Cancel

Number Complement

Leetcode Problem

Number Complement

주어진 수, num의 이진수 표현에서 0을 모두 1로 바꾸고 1을 모두 0으로 바꾼 수를 구하는 문제입니다.

1
2
3
4
5
6
class Solution:
    def findComplement(self, num: int) -> int:
        n = ""
        for s in bin(num)[2:]:
            n += str(1 - int(s))
        return int(n, 2)

num의 이진수 표현에서 ‘0b’ 부분을 제외하고 문자를 차례로 순회하며, 1에서 해당 문자를 빼면 1은 0을 0은 1을 얻을 수 있습니다. 후에 이를 모두 합쳐서 int로 변환하여 반환합니다.

1
2
3
4
5
6
class Solution:
    def findComplement(self, num: int) -> int:
        n = 1
        while n < num:
            n *= 2
        return n - 1 if n == num else n - 1 - num

num 바로 위의 2의 거듭제곱 수를 구한 후, num과 거듭제곱 수가 일치하면 num - 1을 반환하고 아닐 경우 거듭제곱 수에서 num + 1을 뺀 값을 반환하면 답을 구할 수 있습니다.





참고

This post is licensed under CC BY 4.0 by the author.