백준 1094번 막대기 파이썬

박슬빈·2021년 9월 20일
0

알고리즘

목록 보기
19/40

문제

입력 , 출력

solution

n = int(input())
cnt = 1
res = []
res.append(64)
while 1:
    if sum(res) == n:
        break
    a = res.pop()
    if a // 2 >= n:
        res.append(a // 2)
    elif a == 1:
        continue
    else:
        res.append(a // 2)
        res.append(a // 2)
print(len(res))

설명

비트마스킹을 어떻게 하는지 몰라서 그냥 풀었다..
n = 23 이라고 가정
일단은 res에 64를 포함
그리고 64를 2로 나눔 -> 32
32 >= 23 이기때문에 res에 32를 넣음
그리고 32를 pop
32 를 2로 나눔 -> 16
16 < 23 이기때문에 res에 16,16 두개를 넣음
이런식으로 계속 나눠서 res에 총합이 n 이 될때까지 반복함
하지만 이문제는 2진수에서 1의 개수가 몇개인지 알아내는것이였다..
23이면 16 + 4 + 2 + 1 -> 10111 , 즉 1이 4개
정답은 4
이런식으로 푸는게 정석인것 같다.
굉장히 비효율적으로 풀은것 같다!..

잡얘기


프로그래머스 2레벨을 풀었다!!
예전엔 프로그래머스 1레벨도 어려웠는데 2레벨 푸는데 20분? 30분?
정도밖에 안풀은것같은 기분?
아무튼 프로그래머스도 좀 해봐야겠다 백준이랑은 완전 다른느낌이다..

profile
이것저것합니다

0개의 댓글