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비트라는 것을 알면 구현하는데는 어렵지 않았던 거 같다.
'자료구조, 알고리즘 > 비트마스킹' 카테고리의 다른 글
[백준] 1740 거듭제곱(비트마스킹) - Python (1) | 2023.04.23 |
---|---|
[백준] 1052 물병(비트마스킹) - Python (0) | 2023.04.22 |
[백준] 11723 집합(비트마스킹) - Python (1) | 2023.04.16 |