본문 바로가기
Algorithm/구현

[Python3] 백준 3460번 이진수

by HANNI하니 2021. 12. 28.

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

 

댓글