Python/Programmers 강의정리

[ 파이썬을 파이썬답게 ] 정수 다루기, Str 다루기

hae-koos 2021. 12. 16. 02:18
728x90
반응형
모든 게시물은 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까지 출력하는 문제였는데

이를 일일이 쳐서 답이라도 냈던 내 부끄러운 노가다에 미안함을 표한다.

 

728x90
반응형