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명) 으로 처리
반응형