자료구조, 알고리즘/비트마스킹

[백준] 1740 거듭제곱(비트마스킹) - Python

개른 2023. 4. 23. 11:40

https://www.acmicpc.net/problem/1740

 

1740번: 거듭제곱

3의 제곱수를 생각하자. 3의 0제곱, 3의 1제곱, 3의 2제곱, ... 은 순서대로 1, 3, 9, 27, ... 이 된다. 이를 바탕으로, 한 개 이상의 서로 다른 3의 제곱수의 합으로 표현되는 수를 생각할 수 있다. 예를

www.acmicpc.net

 

n = int(input())
bin_num = bin(n)
bin_num = bin_num[2:] # 이진수로 변환했기 때문에 0b 제거
ans = 0
for i in range(len(bin_num)):
    if bin_num[i] == "1": # 1이 있으면 
       temp = 3 ** (len(bin_num)-i-1) # 이진수로 따지면 3의 제곱자리임
       ans +=  temp # 답에 더해주기
print(ans)

 

- 접근방식: 이진수로 변환하여 2의 0승 자리에 3의 0승, 2의 1승자리에 3의 1승으로 계산. 그러면 3의 제곱수의 합으로 표현되는 숫자 출력 가능

- 느낀점:  N은 500,000,000,000 이하의 자연수이므로 하나씩 찾는 방법은 안될 거 같고 이진법으로 응용하여 변환해서 풀면 쉽게 해결 가능.