[백준/Phyton] 3460번 이진수

·2023년 7월 13일

algorithm

목록 보기
10/32

문제

양의 정수 n이 주어졌을 때, 이를 이진수로 나타냈을 때 1의 위치를 모두 찾는 프로그램을 작성하시오. 최하위 비트(least significant bit, lsb)의 위치는 0이다.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다. (1 ≤ T ≤ 10, 1 ≤ n ≤ 106)

출력

각 테스트 케이스에 대해서, 1의 위치를 공백으로 구분해서 줄 하나에 출력한다. 위치가 낮은 것부터 출력한다.


풀이


직접 그림을 그려 이진수를 구해보면 이해가 빠르다.
이진수를 구하는 법은 연속해서 2로 나누어진 나머지를 역순으로 읽는 것이다.
다시 말하면, 맨 위에 위치한(2로 나누기를 반복할 때 가장 먼저 나오는 나머지)나머지 값이 최종 이진수의 최하위 비트이다.

def convertBinary(x): #x를 2진수로 변환하는 함수
    binary=[] #이진수가 담길 문자열
    idx=0
    answer=[]
    
    while(x>=1):
        mod=x%2
        x=x//2
        binary.append(mod)
        if(mod==1):
            answer.append(idx)
        idx+=1
    return answer # 1 1 0 1

T=int(input())
for i in range(T):
    N=int(input())
    answer=(convertBinary(N))
    print(*answer)

처음에는 아예 N을 이진수로 변환하고, 역순으로 비트를 읽어오는 걸 하려고 했는데 너무 복잡해서 위에 언급한 꼼수(?)를 적용했다.

list앞에 *를 붙이면 요소만 한 줄로 출력할 수 있다

profile
풀스택 호소인

0개의 댓글