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

[백준] 1094 막대기(비트마스킹) - Python

개른 2023. 4. 17. 22:29

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

 

1094번: 막대기

지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대

www.acmicpc.net

 

N = int(input()) # 입력 받고
ans = 0
for i in range(7): # 총 64가 최대니 6칸까지 밀어서 비트확인
    if N & (1<<i): # N의 숫자는 총 비트로 막대기 하나하나붙여서 만든거
        ans += 1 # 막대기 하나당 비트하나 더해주기
print(ans)

 

- 접근방식: 막대기 한 개가 비트 1개이다. (64에서 2분의 1씩 쪼개지기 때문) 그래서 처음에 0b000001, 두 번째 0b000010 ... 마지막으로 i가 6일때는 0b1000000가 되어서 64까지 검사가능하다.

- 느낀점: 비트마스킹 문제는 어떻게 비트마스킹을 사용하여 접근할 것인가가 핵심인 거 같다. 이번 문제는 막대기 하나당 1비트라는 것을 알면 구현하는데는 어렵지 않았던 거 같다.