모든 게시물은 macOS Monterey 12.0.1 버전 기준으로 작성하였습니다.
programmers '파이썬을 파이썬답게' 강의를 바탕으로 작성하였습니다.
대뜸 문제로 출발한다. 숫자와 해당 숫자가 어떤 진법으로 표기되었는 지 알려준다.
그리고 이를 10진법 숫자로 출력하는 것이 문제다. 비슷한 문제를 본 것 같기도 한데
우선 스트링을 for 문으로 돌아가며 해당 값을 곱해서 결과를 냈고, 이번에도 그렇듯
답안은 ' 너 이렇게 풀었지 ? ' 한다.. 심지어 이번에는 그 답안보다도 조잡하게 짰다..
먼저 답안에서 말하는 다른 언어의 방식을 먼저 이해해보자. (이것도 생각 못했으니)
num = '3212'
base = 5
answer = 0
for idx, number in enumerate(num[::-1]):
answer += int(number) * (base ** idx)
print(answer)
enumerate를 어떻게 사용하였는 지를 꼭 기억하자.
숫자 '3212'를 기준으로 생각해보면 idx는 순서대로 0부터 3까지 iteration이 돌고,
num은 거꾸로 2, 1, 2, 3 순서로 iteration이 돈다. 즉, 기존의 파이썬 인덱싱은
첫 숫자부터 0, 1, 2, 3 순서대로 가지만 우리가 곱해주고 싶은 차수는 반대니까
num[::-1]을 이용하여 거꾸로 반복문을 돌린 것이다. 다음은 모범답안.
num, base = map(int, input().strip().split(' '))
num = str(num)
answer = int(num, base)
print(answer)
파이썬에서는 진법 변환을 지원하는 함수가 존재한다...???
우리가 그토록 사용하던 int(x)가 사실은 int(x, base = 10)으로
10진법이 디폴트였던 것이다,,, 멍청하면 몸이 고생한다고 했던가. 딱이다.
print(123, base =3) 하면 3*3^(0) + 2*3^(1) + 1*3(2) = 18이 나온다.
문자열을 정렬 주제로 넘어가자.
첫 번째 문제는 들어오는 문자열을 좌측, 가운데, 우측에 순서대로 정렬하는 문제였다.
그리고 다음 문제는 소문자 a부터 z, 대문자 A부터 Z까지 출력하는 문제였는데
이를 일일이 쳐서 답이라도 냈던 내 부끄러운 노가다에 미안함을 표한다.
'Python > Programmers 강의정리' 카테고리의 다른 글
[ 파이썬을 파이썬답게 ] list comprehension, flag, for-else, binary search, inf, 파일 입출력 등등 (2) | 2022.01.14 |
---|---|
[ 파이썬을 파이썬답게 ] Sequence Types 다루기, Itertools, Collections 모듈 활용하기 (0) | 2022.01.06 |
[ 파이썬을 파이썬답게 ] Iterable 다루기 ( list, str, tuple, dictionary ) (0) | 2021.12.16 |
[ 파이썬을 파이썬답게 ] 수강 전에 이 문제를 풀어보세요. (0) | 2021.12.13 |