[백준]1094 막대기

iamjinseo·2022년 5월 31일
0

문제풀이-Python

목록 보기
7/134
post-thumbnail
post-custom-banner

문제

입출력


해설

정신건강상의 이유로 문제는 깊이 해석하지 않는 편이 좋다.
바로 입출력을 보고 생각해보자...

23 => 4
32 => 1
64 => 1
48 => 2
23은 16+4+2+1로 4개
32는 32
48은 32+16
그렇다면 57은? 32+16+8+1로 4개

어라...?이거...이진수로 바꾸면 풀 수 있는거 아니냐...?
57을 만들기위해 1~64까지의 특정한 2의 제곱수들을 더하고 있는데..?
생각해보니 57은 0011 1001이다..
0 * 64 + 1*32 + 1*16 + 1*8 + 0*4 + 0*2 + 1*1 = 57
이거 32+16+8+1이랑 똑같잖아..?

그러면 이진수로 나타냈을 때 1의 개수가 막대의 개수 아니냐..?

코드

#원하는 길이 입력
X = int(input())

#X를 이진수로
#bin(X) : X를 문자열 형태의 이진수로 반환

#1의 개수를 세어보자
#[2:]  :  bin(X)를 하면 0b가 이진수 앞에 붙기때문에 2번 인덱스부터 1세기
print(bin(X)[2:].count('1'))

#수학
#비트마스킹

profile
일단 뭐라도 해보는 중
post-custom-banner

0개의 댓글