프로그래밍/백준

[백준] 3460. 이진수

서요서요 2022. 11. 11. 02:53

문제

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

입력

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

출력

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

 

 

'위치가 낮은 것부터 출력'이라는 말이 잠깐 헷갈렸는데, 

출력 결과는 어떻게 나와야 하는가!

 

13을 이진수변환하면 1101이다.

이 때 최하위 비트부터 위치 순대로,

0 : 1

1 : 0

2: 1

3: 1 로 매칭된다.

 

즉 1의 위치를 낮은 것부터 출력하면 0 2 3 이 되는 것.

 

나의 풀이

 

t=int(input())  # 테스트 케이스 개수 입력

for i in range(t):
    a=format(int(input()),'b')  # 변수 입력 및 이진수 변환
    
    for i, r in enumerate(a[::-1]):  # 위치 낮은 것부터 출력
        if r=='1':
            print(i, end=' ')

 

format을 이용하여 이진수로 변환해주면 정수 형태로 변환되지 않기 때문에

밑의 if 조건문에서 1인지 아닌지 판별할 때 ''를 붙여

텍스트 형태로 판별하여야 한다.

 

분명 값은 잘 나오는데 두 번인가 오답이라고 떠서 보니까 

테스트 케이스를 여러 개 입력할 수 있게 해야 하는데 

나는 위 코드의 t 없이 변수 한 개만 입력하여

하나의 케이스만 시행되도록 짰었기 때문이었다...^-^

문제풀이를 할 때는 조건을 잘 봅시다!