728x90
문제
https://www.acmicpc.net/problem/1094
아이디어
2의 거듭제곱인 [ 64, 32, 16, 8, 4, 2, 1] 중 어떤 막대기들로 조합하면 x를 구할 수 있는지를 찾으면 된다.
가장 단순하게 생각할 수 있는 건 반복문을 돌면서 해당 거듭제곱 수와 대소 비교를 통해 막대기의 수를 구할 수 있을 것 같았다.
그러나 2진수를 이용하면 더 쉽고 간단하게 문제를 해결할 수 있을 거라는 생각이 들어 이를 채택했다.
풀이
# 0 < x <= 64
x = int(input())
# 10진수 x를 2진수로 변경
binary = bin(x)
# 1의 개수를 구하기 위해 2진수 binary를 문자열로 변경
str_bin = str(binary)
# 문자열 str_bin에서 문자 '1'의 개수를 구함
cnt = str_bin.count('1')
print(cnt)
- bin()
- 10진수를 2진수로 변경
- 8 → 0b1000 / 24 → 0b11000 (binary를 뜻하는 0b가 함께 출력됨)
- str()
- 데이터를 문자열로 형 변환
- .count(sub[, start[, end]])
- 리스트나 문자열에서 특정 요소의 개수를 셀 수 있음
- 탐색을 범위(start, end)를 지정할 수 있음
위의 세 개의 함수는 파이썬의 내장 함수이므로 따로 패키지를 import 하지 않고 사용 가능하다.
변수명이 정하기 어려우면 아래와 같이 한 줄로도 작성 가능하다.
print(str(bin(int(input()))).count('1'))
728x90
'알고리즘' 카테고리의 다른 글
[ 백준 ] 1021. 회전하는 큐 (0) | 2024.09.24 |
---|