haju__log

[python][백준/BOJ] 3460번 : 이진수 본문

카테고리 없음

[python][백준/BOJ] 3460번 : 이진수

haju 2023. 9. 23. 00:37

https://www.acmicpc.net/problem/3460

 

3460번: 이진수

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

www.acmicpc.net

✅ 문제 풀이

  • 13을 2진수로 바꾸면 1101(2) 이다. 
  • 출력할 때 위치가 낮은 것부터 출력하라고 했으므로, 2의 0제곱 자리인 마지막 숫자 1이 0의 위치라고 보면된다.
  • 그래서 0번째, 2번째, 3번째가 답인 것!
  • 내가 푼 방식인 while문을 통해 l 리스트에 저장된 값은 2진수로 제대로 바꾼것이 아니나(원래는 l.reverse()를 해주어야 우리가 원하는 이진수의 값이 제대로 나옴) 반대로 출력해야하므로 그대로 l을 사용하였다. (여기서 쫌 헷갈림ㅎ)
import sys

t=int(sys.stdin.readline())
for i in range(t):
    n=int(sys.stdin.readline())
    l=[]
    while n!=0:
        l.append(n%2)
        n//=2
    for j in range(len(l)):
        if l[j]==1:
            print(j,end=' ')