[백준] 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
Author And Source
이 문제에 관하여([백준] 3460 이진수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@swbest99/백준-3460번-이진수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)