다시 쓰는 2745번 ㅎ 전에는 파이썬으로 백준을 처음 풀어본 거였는데 이해했다고 생각했지만 하나도 이해하지 못했던 것 같다 ㅎㅎ 다시 풀어보았고, 전의 풀이가 이제야 완전 이해되어서 다시 정리해본당
alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
N, B = input().split()
B = int(B)
sum = 0
for i in range(len(N)):
sum += (B ** i) * alphabet.index(N[len(N)-i-1])
print(sum)
조심해야 할 건 len(N)-i-1!
0인덱스부터 0의 거듭제곱을 구하는 게 아니고 마지막 인덱스부터 0, 1.. 의 거듭제곱을 구하는 거기 때문에 i를 빼줘야 한다. 그리고 처음에 1을 더 안 빼줘서 틀렸는데, length를 구했기 때문에 인덱스로 맞추려면 1을 빼줘야 한다!
N, B = input().split(" ")
num_list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
result = 0
for i, letter in enumerate(N[::-1]):
result += int(B) ** i * num_list.index(letter)
print(result)
딱 한 달 전에 풀었던 문제이기에 변수명 다른 건 눈 감자🥔..
아무튼 파이썬을 아주 잘 활용한 참 아름다운 풀이인 것 같다.
enumerate가 뭔지 이제 제대로 이해했다! 평소에도 i를 받고 arr[i] 이런 식으로 다시 접근하는 일이 꽤 있었는데, enumerate는 한 번에 이 모든 것을 받아올 수 있다. 또한, 나처럼 1을 빼먹고 틀리는 일이 없이 N을 뒤집어 주었다. N[::-1]을 한다고 N에 뒤집힌 리스트가 저장이 되는 것이 아닌지만, enumerate에 N[::-1]를 전달했고 이걸 기준으로 letter를 받아왔기 때문에 아무 문제가 없다!
인덱스뿐만 아니라 원소까지 같이 한 번에 받고 싶을 때 사용하면 된다.
순서가 있는 자료형(list, string, set, tuple, dictionary)은 모두 사용 가능하다.
enumerate() 함수는 기본적으로 인덱스와 원소로 이루어진 튜플(tuple)을 만들어 준다. 그래서 다음과 같이 작성하면
for i in enumerate(['A', 'B', 'C']):
print(i)
(0, 'A')
(1, 'B')
(2, 'C') 이렇게 출력된다.
이것은 enumerate()는 기본적으로 인덱스와 원소로 이루어진 튜플(tuple)을 만들어 주기 때문이다.
그래서 인덱스와 원소를 다른 변수에 할당해주면 된다.
시작 인덱스를 0이 아니게 하고 싶다면
for i, letter in enumerate(['A', 'B', 'C'], start=1)
이런 식으로 작성하면 된다고 한다.
참고
다음부터 enuemrate 적극 활용해야지 🤓

