[백준] 3460 이진수

📖 문제

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

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

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

예제 입력

1
13

예제 출력

0 2 3

💻 내 코드

T=int(input())

for i in range(0, T):
  n=int(input())
  cnt=0
  while n>0:
    if(n%2==1):
      print(cnt, end=" ")
    cnt+=1
    n=n//2

💡 몰랐던 것

처음 제출 코드

T=int(input())
n=int(input())
cnt=0

for i in range(0, T):
  while n>0:
    if(n%2==1):
      print(cnt, end=" ")
    cnt+=1
    n=n//2

한 번 돌렸을 때 결과는 똑같이 나오는데 틀렸다고 뜸
n 입력을 for문 안에서 받아야 한다

✔ 출력할 때 뒤에 공백 추가하려면 end=" " 해주기...

➕ 추가

✔ 다른 사람들 풀이를 보면

for _ in range(n)

처음 입력 받을 때 이 문장 사용함.
n번만큼 반복해준다는 뜻이다.
이 문제에서는 이렇게 사용 가능

T = int(input())

for _ in range(T):
    n = int(input())

✔ 다른 사람 풀이 (내장 함수 사용)

T = int(input())

for _ in range(T):
    n = bin(int(input()))[2:]
    for i in range(len(n)):
        if n[-i-1] == '1':
            print(i, end = " ")

n = bin(int(input()))[2:]

bin: 2진수로 바꿔주는 함수
결과가 0b1101 이런 형식으로 오게 되는데 0b를 제외하고 뒤에 1101 숫자만 사용하기 위해서 [2:]를 뒤에

if n[-i-1] == '1':
print(i, end = " ")

결과 역순으로 출력

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

좋은 웹페이지 즐겨찾기