본문 바로가기

알고리즘

백준 (3460) 이진수 (python)

https://www.acmicpc.net/problem/3460

문제


정수를 이진수로 나타낼때 이진수의 1의 위치들을 순서대로 출력하는 문제이다.

 

입력


t ( 테스트케이스), 정수 n이주어진다. (1 <= t <= 10) , (1 <= n <= 1000000)

 

 

출력


1의 위치를 공백으로 구분하여 한줄에 출력한다.

 

import sys
length = int(input()) # 테스트 케이스 입력

data = []
for i in range(length):
    data.append(int(sys.stdin.readline())) # 데이터 입력받기

for i in range(length): # 테케 길이 만큼 for 문
    case = data[i] # 개별 케이스 데이터
    moc = case # 몫 변수
    cnt = 0 # 위치 변수
    for j in range(case): # 정수 데이터 만큼 반복

        if moc%2 == 1: # 나머지가 1이면 출력
            print(cnt,end=" ")

        moc = moc//2 # 몫을 나눈다
        if(moc == 0): # 몫이 0이면 끝
            break

        cnt+=1 # 1의 위치를 다음으로 옮김