알고리즘/baekjoon
baekjoon(1094-막대기)_ python
ash silver
2022. 5. 15. 12:19
1) 문제
2) 예시
3) 제출
import sys
input = sys.stdin.readline
def stick(x):
origin = 64
sum = 0
cnt = 0
# 구할 막대기의 길이가 전체 합보다 작을!경우 -> 같으면 안 됨!! 같으면 빠져나와야 함!
while sum < x:
# 구할 막대기 길이가 64면 origin을 반 나누기 전에 확인해야 함
if origin == x:
return 1
# 막대기를 반으로 나눠 다시 저장!
origin = origin/2
# sum에 자른 막대기를 더했을 때 x보다 작으면 카운팅, sum에 자른 막대기 더하기
if origin + sum <= x:
cnt += 1
sum += origin
# 자른 막대기를 sum에 더했을 때 x보다 크면 더 잘라야 함
else:
continue
return cnt
print(stick(int(input())))
4) 메모리/시간/코드길이
5) PLUS
어떻게 구현해야할지 열심히 노트에 적으면서 생각해봤다
x -> 구할 막대의 길이를 x로 받고
origin -> 원래의 막대 길이를 origin에 저장, origin을 계속 반으로 줄여 나감
sum -> sum에 더할 수 있는 origin값을 더하면서 x와 비교
cnt -> if문에 걸릴 때마다 막대를 붙이는 것이기 때문에 cnt로 수 체크
(상위권 등수에 있는 다른 사람들 풀이),,,
print(sum(list(map(int, bin(int(input()))[2:]))))
print(bin(int(input())).count("1"))
x=int(input())
cnt=0
cnt=bin(x).count('1')
print(cnt)
=> 한 줄로 끝남,,,,,
bin()함수는 2진수로 바뀌는 것인데 1이 들어있는 부분을 카운팅해 출력한다,,