프로그래밍/백준
[백준] 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 없이 변수 한 개만 입력하여
하나의 케이스만 시행되도록 짰었기 때문이었다...^-^
문제풀이를 할 때는 조건을 잘 봅시다!