[백준] 3460_이진수_브론즈3 for python

juyeon·2022년 7월 1일
0

문제

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

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

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

나의 풀이

t = int(input())
for _ in range(t):
    num = bin(int(input()))[2:]
    for i in range(1, len(num) + 1):
        if num[-i] == '1':
            print(i-1, end = ' ')
  • num[-i] 하는 이유?
# n: 1101
print(n[-1]) # 1
print(n[-2]) # 0
print(n[-3]) # 1
print(n[-4]) # 1

: 최하위 비트(least significant bit, lsb) 때문!!

: 보통 인덱스는 0, 1, 2...이지만, 진법에서 LSB는 인덱스로 따지면 -1이기 때문에!!

  • print(i-1, end = ' ') 하는 이유?

: LSB는 인덱스로 따지면 -1인데, 문제 조건에서 LSB = 0 으로 명시했기 때문에!

profile
내 인생의 주연

0개의 댓글