# bronze 3
문제
https://www.acmicpc.net/problem/3460
코드
cnt=int(input())
# 테스트 케이스 개수
for i in range(cnt):
num = int(input())
#테스트 케이스 값 반복해서 입력받기
idx = 0 #이진수로 나타냈을 때 1의 위치 값
bin=[] #1의 위치 값 기록할 리스트
while True:
if num%2 == 1: #나머지가 = 1 == 이진수로 나타냈을때 1인 곳
bin.append(idx)
num = num//2 #계산 진행하기 위해 몫 구하기 (정수로 진행돼야 하므로)
idx +=1 #위치값 +1
if num is not 0: continue #0이 나오기 전까지 반복 (1이 나왔을 경우 1//2 = 0 이므로 다음 턴에 break)
break
print(*bin) #리스트 값만 전체 출력
풀이
- 이진수를 직접적으로 다 구하지 않고, 1이 나오는 위치값만 기록했다.
- num이 1인 경우 최상위 비트로 들어가고 계산이 끝나야 함
- num//2로 처리해 num=1인경우 해당 위치(idx)가 bin에 추가되고, 0으로 진행되게한다
- num = 0인 경우 break로 계산이 끝난다.
- while문이 끝난 후, bin에는 비트가 1인 부분의 위치값만 기록됨
+
- [1, 2, 3, 4, 5] → 1 2 3 4 5 로 출력하는 법 (대괄호, 콤마 없이 출력하기)
- print(*list명) 으로 처리
'Algorithm > Beakjoon' 카테고리의 다른 글
[Python] 백준 2460번_ 지능형 기차 2 (0) | 2022.07.26 |
---|---|
[Python] 백준 10818번_ 최소, 최대 (0) | 2022.07.26 |
[Python] 백준 1978번_ 소수 찾기 (0) | 2022.07.24 |
[Python] 백준 2693번_ N번째 큰 수 (0) | 2022.07.22 |
[Python] 백준 2501번_약수 구하기 (0) | 2022.07.21 |