• TOC {:toc}

이 글은 백준 온라인 저지의 3460번 문제를 파이썬(Python)으로 풀이한 것을 모아놓은 글입니다.

일종의 연습 기록이며 제가 정답을 받은 코드와 참고할만한 다른 코드를 같이 기록합니다. 필요한 경우 코드에 대한 해설을 기록합니다만 코드는 통과했어도 해설은 틀릴 수 있기 때문에 가볍게 참고해주시길 부탁드립니다. 피드백은 편하신 방법으로 자유롭게 주시면 감사하겠습니다.

2021.03.29

메모리 시간 코드 길이
28776 KB 64 ms 179 B
T = int(input())

for _ in range(T):
    n = int(input())
    # 입력받은 숫자를 이진수로 변환한 뒤 역전시킨다.
    b = str(bin(n))[:1:-1]

    # 문자열을 순회할 때
    for i in range(len(b)):
        # 각 자리 원소의 값이 1이면
        if b[i] == "1":
            # 그 지점의 인덱스를 출력한다.
            print(i, end=" ")
    print()

아이디어 & 풀이

이진수로 변환할 때 bin()으로 변환한 이진수는 앞에 0b가 붙기 때문에 끝값을 1로 지정한다(숫자 끝에서부터 인덱스 2인 수까지 잘린다).

피드백

  • 출력할 때 언 패킹(unpacking)을 더 적극적으로 활용해보자.

참고 답안

T = int(input())
for _ in range(T):
    # 받은 숫자를 이진수로 치환해서 역전한다.
    B = f'{int(input()):2b}'[::-1]
    # 해당 인덱스의 원소의 값이 1이면 그 인덱스로 배열을 구성
    G = (b for b in range(len(B)) if B[b] == '1')
    print(*G)