출처 | https://www.acmicpc.net/problem/2745
문제 설명은 해당 링크 참조
1) B진법 수 N이 주어진다. -> 10진법으로 바꿔 출력 + 10진법을 넘어가면 알파벳 대문자로 사용
2) 예제 입력 1 <-> 예제출력 1의 관계
를 파악한다.
3) 출력 부분
첫째 줄에 B진법 수 N을 10진법으로 출력한다.
4) Z = 35 // 진법 - 36
(35x36^4) + (35x36^3) + (35x36^2) + (35x36^1) + (35x36^0) = 60466175
N, b = input().split()
ary = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
N = N[::-1] # 역순저장
result = 0
for i,n in enumerate(N):
result += (int(b)**i)*(ary.index(n))
print(result)
enumerate()
함수는 기본적으로 인덱스와 원소로 이루어진 튜플(tuple)을 만들어준다. 따라서 인덱스와 원소를 각각 다른 변수에 할당하고 싶다면 인자 풀기(unpacking)를 해줘야 한다.>>> for entry in enumerate(['A', 'B', 'C']):
... print(entry)
...
(0, 'A')
(1, 'B')
(2, 'C')
>>> for i, letter in enumerate(['A', 'B', 'C'], start=1):
... print(i, letter)
...
1 A
2 B
3 C
enumerate 동작원리 및 예시 참고
출처| https://www.daleseo.com/python-enumerate/
2)
for i,n in enumerate(N):
result += (int(b)**i)*(ary.index(n))
해당 코드를 디버깅 하게 되면 자세한 부분은 이와 같이 된다. -> 직접 꼭 해보시길! 4번) 아이디어와 동일함
for i, n in enumerate(N):
에서 i와 n은 각각 인덱스와 원소를 나타낸다. 따라서 첫 번째 반복에서 i는 0이 되고 n은 z가 된다.
a, b = input().rstrip().split()
print(int(a, int(b)))
파이썬의 경우 int 함수
를 활용하여 간단하게 n진법을 10진법으로 변환할 수 있다.
int(변환할string, n진법)형식으로 사용한다.n진법은 int형으로 입력해야 한다.