try 5 times / 난이도 : ★★★☆☆ (이진수를 몰랐어서..)
문제 확인
3460번: 이진수
양의 정수 n이 주어졌을 때, 이를 이진수로 나타냈을 때 1의 위치를 모두 찾는 프로그램을 작성하시오. 최하위 비트(least significant bit, lsb)의 위치는 0이다.
www.acmicpc.net
코드 깃허브 확인
GitHub - yyeongeun/codingtest: 코딩테스트 공부
코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.
github.com
정답 해설
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)
레퍼런스
- 문제 해설
[ 파이썬(python) ] 백준 3460 - 이진수
📍 백준 3460 - 이진수 백준 3460 - 이진수 ⚡️ 나의 풀이 1의 위치를 찾으면 되는 문제이고 입력을 bin 함수로 변환했는데 중요한 점은, bin 함수를 사용하게 되면 ob1010 처럼 문자열로 출력한다. 따
ywtechit.tistory.com
- 이진수 설명
2진수,10진수계산법/이진수,십진수 계산법(빠른 계산법)/이진법,십진법 계산
10진수,2진수 계산법 10진수,2진수,8진수,16진수 표 10진수에서 2진수로 계산하는 방법은 두개가 있습니다. 하나는 기본적인 계산법, 또 다른 하나는 빠른 계산법입니다. 10진수->2진수 계산법 (기본
eunhee-programming.tistory.com
- 최하위 비트 설명
최하위 비트 - 위키백과, 우리 모두의 백과사전
최하위 비트가 밝게 표시된 십진수 149의 이진 표기법. 8 비트 이진수에서 최상위 비트는 십진수 128을 나타낸다. 최하위 비트는 1을 나타낸다. 컴퓨팅에서 최하위 비트(least significant bit, LSB)는 이
ko.wikipedia.org
- enumerate 함수 설명
[ Python Skill ] range 대신 enumerate를 써야하는 이유
Python에서 iterable한 자료구조를 for문을 통해 순회할때 주로 range와 enumerate 두 가지를 사용합니다. 이번 포스팅에서는 range 보다 enumerate를 써야하는 이유에 대해 살펴보겠습니다. 1. range는 len함수
potensj.tistory.com
- 리스트 인덱싱
11. List(리스트)(2) - 리스트 인덱싱, 리스트 슬라이싱
## 1.list indexing(리스트 인덱싱) - 파이썬에서 리스트 인덱싱은 `-`(음수 인덱싱) 값도 허용합니다. - `-` 값은 역순으로도 인덱싱됩니다. - 다른 ...
wikidocs.net
'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 |
댓글