본문 바로가기
알고리즘/입문용

[백준/Python] 3460 이진수

by 파프리카_ 2020. 6. 4.
728x90
반응형


풀이

  1. 첫번째 줄에는 Test case의 개수이므로 input받아주고, int로 변환해주어, 다음 수부터 바로 반복문으로 쓰일 수 있게끔 활용해준다.
    ( * for _ in range(n) : n번만큼 반복해준다는 뜻이다. 
        백준에서 알고리즘 문제 풀 때 매우 유용하다 )
  2. 이진수로 변환할 숫자 n을 받은 후,
    십진수 -> 이진수로 변환해주는 내장 함수 bin()을 이용해준다.
  3. bin()함수를 써주면 문자형으로 저장되고, 끝에 쓸 데 없이 '0B'가 붙기 때문에, 
    이를 해결하기 위해 1) 리스트로 변환 2) 슬라이싱을 통해 '0B'를 지워준다. 
     + 1이 들어간 작은 수부터 출력해주어야 하기 때문에 [::-1]를 통해 반대로 저장해준다.
     + list.reverse()를 사용해보았으나 계속 None으로 출력되고 '0B'를 지우는 슬라이싱을 동시에 진행해주지 못하기에 효율성 측면에서 [:1:-1]로 진행하였다.
  4. result를 리스트로 하여, for 구문에서 result.append(인덱스)해주어도 되지만, 마지막에 출력할 때 결국 join을 써서 또 str형태로 변환해주어야 하기 때문에,
    처음부터 result에 추가해주는 방법을 사용하였다.
  5. 마지막 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