이 문제는 2진수 -> 10진수 변환과 10진수 -> 2진수 변환 모두를 구현해야 하는 문제이다.
파이썬 내장 함수와 문자열 인덱싱을 통해 쉽게 구현할 수도 있지만, 직접 코드를 작성해보았다.
💻 최종 코드
n = int(input())
b = []
x = 0
ans = []
c = 0
while n != 0:
if n % 2 == 0: b.append('0')
else: b.append('1')
n //= 2
# 뒤에서부터 append 되니까 어차피 뒤집혀 나옴
s = ''.join(b)
for i in range(len(s)-1,-1,-1):
x = int(s[i]) * 2 ** c
ans.append(x)
c += 1
print(sum(ans))
while 문은 10진수를 이진수로 변환한 코드이다.
아래 단계와 같이 몫과 나머지를 활용하면 10진수 > X진수 변환을 구할 수 있다!
for문은 10진수 -> 2진수 변환이다. s라는 문자열에 이진수를 구성하는 문자형 숫자들이 나열되어 있기 때문에, 자릿수마다 2에 대한 지수 연산을 해주면 2진수로 변환이 가능하다.
뒤에서부터 2^0, 2^1, .... 으로 연산이 되기 때문에, 반복문에서 문자열 뒤부터 연산을 하기 위해 범위를
range(len(s)-1, -1, -1)으로 잡아주었다.
'PS > BOJ&Programmers' 카테고리의 다른 글
[백준/7510] 고급 수학 (0) | 2023.01.14 |
---|---|
[백준/3986] 좋은 단어 / 스택 / 스택 활용법 / 스택 원리 (0) | 2023.01.13 |
[백준/2947] 나무 조각/정렬/두가지 풀이 (1) | 2023.01.11 |
[백준/6996] 애너그램.. 반례찾기 (1) | 2023.01.10 |
[백준/1159] 농구경기 (4) | 2023.01.10 |