2745-진법변환[파이썬]

지환·2023년 8월 17일
0

백준(python)

목록 보기
10/67

출처 | 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

코드1

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)

코드설명

1) enumerate

  • enumerate() 함수는 기본적으로 인덱스와 원소로 이루어진 튜플(tuple)을 만들어준다. 따라서 인덱스와 원소를 각각 다른 변수에 할당하고 싶다면 인자 풀기(unpacking)를 해줘야 한다.
>>> for entry in enumerate(['A', 'B', 'C']):
...     print(entry)
...
(0, 'A')
(1, 'B')
(2, 'C')
  • 시작 인덱스 변경

    루프를 돌리다보면 인덱스를 0이 아니라, 1로 시작하고 싶을 때가 있다. 이럴 때는 enumerate() 함수를 호출할 때 start 인자에 시작하고 싶은 숫자를 넘기면 된다.
>>> 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가 된다.

코드2

a, b = input().rstrip().split()
print(int(a, int(b)))

코드설명

파이썬의 경우 int 함수를 활용하여 간단하게 n진법을 10진법으로 변환할 수 있다.

int(변환할string, n진법)형식으로 사용한다.n진법은 int형으로 입력해야 한다.

profile
아는만큼보인다.

0개의 댓글