룰루코딩

백준 1094 막대기 본문

백준

백준 1094 막대기

rulru01 2024. 10. 1. 00:54

문제


솔루션

import sys
input = sys.stdin.readline

x = int(input())
li=[64]
while sum(li) > x:
    tmp = li.pop()/2
    li.append(tmp)
    li.append(tmp)
    if sum(li[:-1])>=x:
        li.pop()
print(len(li))

깨달은점

문제를 하나씩 읽으면서 그대로 코드를 짰더니 되긴했다.

다른 풀이법을 찾아보니 처음 수가 정해져있어서 그런지 리스트를 미리 짜놓고 푸는 방법도 있었다.

x = int(input())
li = [64, 32, 16, 8, 4, 2, 1]
cnt = 0
while x > 0:
    for i in li:
        if x // i == 1:
            cnt += 1
            x -= i
            break
print(cnt)
x = int(input())
li = [64,32,16,8,4,2,1]
cnt = 0

for i in li:
    while x-i >= 0:
        x -= i
        cnt += 1
print(cnt)

 

 

 

아예 다른 풀이 방법도 있었다.

print(bin(int(input()))[2:].count('1'))

X를 이진수로 변환하였을 때, 1의 개수를 출력하는 문제라고 하는데 여기까지는 생각하지 못할 것 같다..

'백준' 카테고리의 다른 글

백준 11399 ATM  (0) 2024.10.02
백준 1260 DFS와 BFS  (1) 2024.10.01
백준 7785 회사에 있는 사람  (0) 2024.10.01
백준 17219 비밀번호 찾기  (2) 2024.09.28
백준 1620 나는야 포켓몬 마스터 이다솜  (2) 2024.09.27