728x90
반응형
풀이
- 첫번째 줄에는 Test case의 개수이므로 input받아주고, int로 변환해주어, 다음 수부터 바로 반복문으로 쓰일 수 있게끔 활용해준다.
( * for _ in range(n) : n번만큼 반복해준다는 뜻이다.
백준에서 알고리즘 문제 풀 때 매우 유용하다 ) - 이진수로 변환할 숫자 n을 받은 후,
십진수 -> 이진수로 변환해주는 내장 함수인 bin()을 이용해준다. - bin()함수를 써주면 문자형으로 저장되고, 끝에 쓸 데 없이 '0B'가 붙기 때문에,
이를 해결하기 위해 1) 리스트로 변환 2) 슬라이싱을 통해 '0B'를 지워준다.
+ 1이 들어간 작은 수부터 출력해주어야 하기 때문에 [::-1]를 통해 반대로 저장해준다.
+ list.reverse()를 사용해보았으나 계속 None으로 출력되고 '0B'를 지우는 슬라이싱을 동시에 진행해주지 못하기에 효율성 측면에서 [:1:-1]로 진행하였다. - result를 리스트로 하여, for 구문에서 result.append(인덱스)해주어도 되지만, 마지막에 출력할 때 결국 join을 써서 또 str형태로 변환해주어야 하기 때문에,
처음부터 result에 추가해주는 방법을 사용하였다. - 마지막 print해줄 적에 맨 마지막에 들어간 공백을 지우기 위해 rstrip()을 이용하였다.
* rstrip : 오른쪽 공백 제거
* lstrip : 왼쪽 공백 제거
* strip : 양쪽 공백 제거
코드
T = int(input())
for _ in range(T):
n = int(input())
binary_n = list(bin(n))[:1:-1]
result = ''
for i, bn in enumerate(binary_n):
if bn == '1':
result += str(i)+' '
print(result.rstrip())
728x90
반응형
'알고리즘 > 입문용' 카테고리의 다른 글
[백준/Python] 2845 파티가 끝나고 난 뒤 (0) | 2020.06.03 |
---|