[문제]
[내 코드]
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], ...
'컴퓨터 > 코딩테스트' 카테고리의 다른 글
[백준/튼튼한기본기] 10870번: 피보나치수 5 (0) | 2022.09.11 |
---|---|
[백준/튼튼한기본기] 2460번: 지능형 기차 2 (1) | 2022.09.11 |
[백준/튼튼한기본기] 10818번: 최소, 최대 (0) | 2022.09.10 |
[백준/튼튼한기본기] 2501번: 약수구하기 (0) | 2022.09.09 |
[백준] 입력/input값 받기 (0) | 2022.09.09 |