Skip to content

Latest commit

 

History

History
35 lines (27 loc) · 1.35 KB

File metadata and controls

35 lines (27 loc) · 1.35 KB

😇 백준 3460번 (이진수)

  • Date : 2021.03.04(목)
  • Time : 10분

문제

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

입력

  • 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다. (1 ≤ T ≤ 10, 1 ≤ n ≤ 10^6)

출력

  • 각 테스트 케이스에 대해서, 1의 위치를 공백으로 구분해서 줄 하나에 출력한다. 위치가 낮은 것부터 출력한다.

이진수 변환 함수 사용하지 않은 풀이

def getBinaryNum(n, lists):
    a, b = divmod(n, 2)
    lists.append(b)
    if a == 0 :
        return lists
    else :
        return getBinaryNum(a, lists)

answerList = []
answer = getBinaryNum(n,answerList)
for i in range(len(answer)):
    if answer[i] == 1:
        print(i, end = ' ')

: 재귀 호출을 이용한 풀이이다. 10진수를 2진수로 변환하는 방법은 n을 2로 나눈 나머지를 계속 기록하고, 몫을 계속 2로 나눠주는 것을 반복하는 방법이다. divmod를 사용하면 몫과 나머지를 반환해준다. 나머지는 배열에 저장한 후 몫이 0이 될 때까지 재귀 호출로 반복해준다.