Adventure Time - Jake [백준/python] 2745 진법변환: B진법->10진법 변환하기/ 문자열, reversed객체, join함수
본문 바로가기
Back-end/백준(python)

[백준/python] 2745 진법변환: B진법->10진법 변환하기/ 문자열, reversed객체, join함수

by bogyoi 2023. 10. 25.
N, B= input().split()
B=int(B)

num='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' #Z:35

result=0
j=len(N)-1
for i in range(0,len(N)):
  result+=(B**j)* num.index(N[i])
  j-=1

print(result)
 
 

B진법 -> 10진법:

제곱승씩 곱해서.

 

110 -> B의 1승*1 + B의 2승*1= 2+4= 6

인걸 떠올려보면 위와 같이 코드를 짤 수 있다.

 

10이상부터는 A,B,C,.. 로 하기때문에 그 부분을 어떻게 해야할까 라는 생각을 했다.

딕셔너리를 이용해 'A':10, 'B':11, ..'Z':35 이런식으로 키 값을 매칭시켜주고 키를 통해 값에 접근해볼까?

하고 딕셔너리를 쭉 작성하다보니 line too long 도 뜨고 실제 계산부 코드쪽이 복잡해질 것 같았다.

 

그래서 다른 사람들의 코드를 살펴보니

저런식으로 문자열을 차례대로 선언해놓고, 해당 문자열에서 해당 값을 찾으면 그 인덱스를 반환하는 쪽으로 했더라.

(A의 인덱스값은 10이니 A가 입력되면 10이 반환될것이다.)

나는 따로 j라는 변수를 선언하여 각 자리에 맞게 제곱승을 곱해주는 식으로 구현했는데, 다른 사람이 작성한 코드도 살펴보자.

 

 

https://growingarchive.tistory.com/208

이 분은 N=''.join(reversed(N))를 통해 N을 뒤집어서 제곱승을 계산해주었다.

reversed(N)를 통해 N을 역순으로 저장해주고,

하나의 문자열로 저장하기위해 join함수를 쓴 것.

 

참고로 N=reversed(N)를 하면 for-loop의 len(N)에서 object of type 'reversed' has no len() 오류가 발생한다.

실제로 type(N)으로 N의 타입을 살펴보면 <class 'reversed'>로 reversed타입으로 나온다.

그래서 reversed 객체를 tuple 혹은 list로 바꾸어 사용해주려면 다음과 같이

list(reversed(s))

tuple(reversed(s))

와 같은 형태로 써주는 것이다.

같은 의미로 reversed객체를 문자열로 바꾸어 사용해주기를 원하므로 join 함수를 이용한 것이다.