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라는 변수를 선언하여 각 자리에 맞게 제곱승을 곱해주는 식으로 구현했는데, 다른 사람이 작성한 코드도 살펴보자.
이 분은 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 함수를 이용한 것이다.
'Back-end > 백준(python)' 카테고리의 다른 글
[백준/python] 2292 벌집: 먼저 규칙을 찾고 어떻게 풀어낼 지 생각하는 문제 (0) | 2023.10.25 |
---|---|
[백준/python] 11005 진법 변환 2: 문자열 결합에서의 +연산 (0) | 2023.10.25 |
[백준/python] 2903 중앙 이동 알고리즘: 수학적인 사고를 해보장.. (0) | 2023.10.25 |
[백준/python] 2720 세탁소 사장 동혁: 거스름돈 계산 -> 그리디 알고리즘이 왜 가능할까? (0) | 2023.10.25 |
[백준/python] 11653 소인수분해: 소인수분해가 끝날 조건을 생각해보자 (0) | 2023.10.25 |