컴퓨터/코딩테스트
[백준/튼튼한기본기] 3460번: 이진수구하기
우연구
2022. 9. 10. 00:08
[문제]
[내 코드]
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], ...