[문제]

 

[내 코드]

for t in range(int(input())):
    n = int(input())
    bi = bin(n)[2:][::-1]
    for i, b in enumerate(bi):
        if b == '1':
            print(i, end=' ')

- 30840KB, 68ms

- "최하위 비트(least significant bit, lsb)의 위치는 0이다." 라는 부분을 이해하지 못해서 실수를 했다; bin으로 변환한 이진수를 거꾸로 해줘야 됐던 것이다.

- [::-1] 를 붙여 string을 reverse했다.

 

컴퓨팅에서 최하위 비트(least significant bit, LSB)는 이진 정수에서 짝수인지 홀수인지를 결정하는 단위값이 되는 비트 위치
이다. 최하위 비트는 가장 적은 숫자를 오른쪽에 기록하는 자리 표기법의 규정 때문에 "right-most bit"라고 부르기도 한다.

 

[개선안]

T = int(input())

for _ in range(T):
    n = bin(int(input()))[2:]
    for i in range(len(n)):
        if n[-i-1] == '1':
            print(i, end = " ")

 

- string으로 된 이진수를 거꾸로 만들기보다는, 애초에 뒤에서부터 세는 방법을 썼다

- 이진수의 길이만큼 for문을 돌리는데, 인덱싱은 뒤에서부터 [-1], [-2], [-3], ...

복사했습니다!