Algorithm/Beakjoon
[Python] 백준 3460번_ 이진수
mopipi
2022. 7. 26. 15:58
반응형
# bronze 3
문제
https://www.acmicpc.net/problem/3460
3460번: 이진수
양의 정수 n이 주어졌을 때, 이를 이진수로 나타냈을 때 1의 위치를 모두 찾는 프로그램을 작성하시오. 최하위 비트(least significant bit, lsb)의 위치는 0이다.
www.acmicpc.net
코드
cnt=int(input())
# 테스트 케이스 개수
for i in range(cnt):
num = int(input())
#테스트 케이스 값 반복해서 입력받기
idx = 0 #이진수로 나타냈을 때 1의 위치 값
bin=[] #1의 위치 값 기록할 리스트
while True:
if num%2 == 1: #나머지가 = 1 == 이진수로 나타냈을때 1인 곳
bin.append(idx)
num = num//2 #계산 진행하기 위해 몫 구하기 (정수로 진행돼야 하므로)
idx +=1 #위치값 +1
if num is not 0: continue #0이 나오기 전까지 반복 (1이 나왔을 경우 1//2 = 0 이므로 다음 턴에 break)
break
print(*bin) #리스트 값만 전체 출력
풀이
- 이진수를 직접적으로 다 구하지 않고, 1이 나오는 위치값만 기록했다.
- num이 1인 경우 최상위 비트로 들어가고 계산이 끝나야 함
- num//2로 처리해 num=1인경우 해당 위치(idx)가 bin에 추가되고, 0으로 진행되게한다
- num = 0인 경우 break로 계산이 끝난다.
- while문이 끝난 후, bin에는 비트가 1인 부분의 위치값만 기록됨
+
- [1, 2, 3, 4, 5] → 1 2 3 4 5 로 출력하는 법 (대괄호, 콤마 없이 출력하기)
- print(*list명) 으로 처리
반응형