try 5 times / 난이도 : ★★★☆☆ (이진수를 몰랐어서..)
문제 확인
코드 깃허브 확인
정답 해설
T = int(input()) # 테스트 케이스 개수
for _ in range(T):
# 양의 정수 입력시 이진수로 변환
# 프로그래밍 언어에서 숫자 앞에 0b를 붙이므로, 2번째 값부터 숫자
n = bin(int(input()))[2:] # 문자열
# 이진수는 오른쪽 숫자부터 제일 작은 숫자이다. (최하위 비트)
# 최하위 비트의 위치는 0이라고 했으므로 가장 왼쪽으로 바꿔줘야한다.
# 범위를 거꾸로 선언한다.
# 방법1
for idx, val in enumerate(n[::-1]):
if val == '1': #n이 문자열이니까
print(idx, end=' ')
# 방법2
# for i in range(len(n)):
# if n[-i-1] == '1':
# print(i, end=' ')
공부한 내용
1. bin(정수)[2:]
bin함수는 십진수를 이진수로 변환해준다.
프로그래밍 언어에서는 이진수 숫자 앞에 '0b'가 붙으므로 [2:] 인덱싱이 필요하다.
인덱싱 했으므로 문자열임을 주의!
2. 최하위 비트와 이진수 계산법 알기
컴퓨터에서 최하위 비트는 이진수가 짝수인지 홀수인지를 결정하는 단위값이 되는 비트를 말한다.
가장 적은 숫자를 오른쪽에 표기하기 때문에, right-most bit라고 부르기도 한다.
- 최하위 비트 = 가장 오른쪽 숫자
- 최상위 비트 = 가장 왼쪽 숫자
27(십진수)의 이진수는 11011이다. 가장 오른쪽 1이 최하위 비트이다.
파이썬에서 인덱싱을 할 때, 가장 왼쪽 숫자부터 0인데
문제에선 최하위 비트의 위치(즉, 오른쪽 위치)를 0이라고 했으므로, 순서를 거꾸로 선언해야한다.
3. 리스트 순서 거꾸로 선언하기
arr[::2] = 첫칸부터 2칸씩 뛰어서 출력하기
arr[::-1] = arr[-i-1] = 거꾸로
# 리스트 - 범위를 거꾸로 선언하는 방법
for i in range(len(arr)-1,-1,-1):
print(arr[i], end=' ')
# 리스트 - 출력을 거꾸로 선언하는 방법
for i in range(len(arr)):
print(arr[-i-1], end=' ')
4. enumerate 함수
인덱스와 원소를 동시에 접근할 수 있는 파이썬 내장 함수이다.
for entry in enumerate(['A', 'B', 'C']):
print(entry)
<결과 확인>
(0, 'A')
(1, 'B')
(2, 'C')
위 예시처럼 기본적으로 인덱스와 원소를 (인덱스,원소)형태의 tuple로 만들어준다.
각각 다른 변수에 할당도 가능하다. ->위 정답 해설 확인
인덱스의 시작 값을 바꾸고 싶다면 start 인자를 지정하면 된다. -> enumerate(array,start=1)
레퍼런스
- 문제 해설
- 이진수 설명
- 최하위 비트 설명
- enumerate 함수 설명
- 리스트 인덱싱
'Algorithm > 구현' 카테고리의 다른 글
[Python3] 백준 2309번 일곱 난쟁이 (0) | 2022.01.02 |
---|---|
[Python3] 백준 10870번 피보나치 수 5 (0) | 2021.12.31 |
[Python3] 백준 2460번 지능형 기차 2 (0) | 2021.12.29 |
[Python3] 백준 10818번 최소, 최대 (0) | 2021.12.28 |
[Python3] 백준 2501번 약수 구하기 (0) | 2021.12.28 |
댓글