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

pengu·2021년 3월 12일
0
post-thumbnail

📙 몫과 나머지

문제 설명
숫자 a, b가 주어졌을 때 a를 b로 나눈 몫a를 b로 나눈 나머지를 공백으로 구분해 출력해보세요.

입력 설명
입력으로는 공백으로 구분된 숫자가 두 개 주어집니다.
첫 번째 숫자는 a를 나타내며, 두 번째 숫자는 b를 나타냅니다.

출력 설명
a를 b로 나눈 몫과 a를 b로 나눈 나머지를 공백으로 구분해 출력하세요.

제한 조건
a와 b는 자연수입니다.


입출력 예

inputoutput
5 31 2

🔔 내 풀이

print(a//b, a%b)

🔔 강의 Tip

파이썬의 divmod와 unpacking을 이용하여 몫과 나머지를 구할 수 있다.

print(*divmod(a,b))

참고 사항
무조건 divmod를 쓰는 것이 좋은 것은 아님!! 가독성, 코딩스타일을 고려하여 사용
또한, divmod는 작은 숫자를 다룰 때는 a//b, a%b 보다 느리지만,
큰 숫자를 다룰 때는 divmod가 더 빠름



📙 n진법으로 표기된 string을 10진법 숫자로 변환하기

문제 설명
base 진법으로 표기된 숫자를 10진법 숫자 출력해보세요.

입력 설명
입력으로는 공백으로 구분된 숫자가 두 개 주어집니다.
첫 번째 숫자는 num을 나타내며, 두 번째 숫자는 base를 나타냅니다.

출력 설명
base 진법으로 표기된 num을 10진법 숫자로 출력해보세요.

제한 조건
- base는 10 이하인 자연수입니다.
- num은 3000 이하인 자연수입니다.


입출력 예

inputoutput
12 35
444 5124

입출력 예 1
3진법으로 표기된 12는 10진법으로 표현하면 5입니다. ( 1*3 + 2 )

입출력 예 2
5진법으로 표기된 444는 10진법으로 표현하면 124입니다. ( 4*5*5 + 4*5 + 4 )

🔔 내 풀이

num = '3212'
base = 5
answer = 0
for idx, n in enumerate(num):
  i = len(num) - idx -1
  answer += int(n) * (base ** i)      

🤔 개선 사항
리스트 슬라이싱을 이용하면 코드를 더 줄일 수 있다

for idx, n in enumerate(num[::-1]):    
  answer += int(n) * (base ** idx) 

리스트 슬라이싱 (List Slicing)

리스트변수[시작인덱스:종료인덱스:step]

종료 인덱스의 원소는 포함되지 않으며 step은 생략 가능함
step을 활용하여 리스트변수[::-1] 과 같이 리스트를 reverse할 수 있음

🔔 강의 Tip

파이썬의 int(x, base=10) 함수를 이용하여 진법 변환이 가능하다.

num = '3212'
base = 5
answer = int(num, base) 

✔ int 함수의 첫 번째 파라미터는 문자열 또는 숫자 형식이어야 함
단, 두 번째 파라미터를 입력하려는 경우 첫 번째 파라미터는 문자열 형식인 것에 유의!

#가능
int(99)
int(99.9)
int('99')
int('99', 11)           
#불가능
int(99, 11)

Programmers - 파이썬을 파이썬답게 https://programmers.co.kr/learn/courses/4008

profile
꾸준하게

0개의 댓글