백준풀이-python

3460 이진수 정리

Fug 2021. 7. 13. 10:17

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

 

3460번: 이진수

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

www.acmicpc.net

#1

#format함수를 이용한 풀이
t=int(input())

#테스트케이스 t

for i in range(t):

n=int(input())

#i에대한 n값

n=format(n,'b')

#n을 'b'(binary)[이진법]으로 formating

for i in range(-1,-(len(n))-1,-1):

'''

-1에서 시작해서 -1씩 증가하는데 반대로 끝값 즉 0 1 2 3 이면 -4가 끝값으로 되야되는데 생각하는게 너무 어려웠고 for문에서 마지막 값이 +1만 한다고 생각하면 안된다는걸 깨달았다. 증가하는 값을 기준으로 생각해야된다는 것을 알았다.

'''

if n[i]=='1':

print(-i-1,end=' ')

#i가 1이면 이제 -로 바꿨던 인덱스를 원래대로 생각 하는 것 힘들었다.

 

#2

#bin함수를 이용한 풀이
t=int(input())

#테스트케이스 t
for i in range(t):

n=int(input())

#i에 대한 n값

n=bin(n)

#bin 함수를 이용하면 '0b이진수' 이런식으로 스트링 형태로 나온다. 13이면 '0b1011'이런식

for j in range(len(n)-1,1,-1):

if n[j]=='1':

print((len(n)-1)-j,end=' ')

#2번 풀면서 1번에서 왜 헷갈렸는지 생각한 끝에 for문에 대한 이해를 제대로 하게 되었다.

 

#bin과 format함수를 이용하여 이진수에 대해 알아봤던 문제.