Stay Hungry Stay Foolish

파이썬 강의/파이썬을 파이썬답게

[파이썬을 파이썬답게] Part 02. 정수 다루기 (Programmers)

dev스카이 2023. 10. 16. 22:09

☐ 문제 1

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

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

 

제한 조건

  • a와 b는 자연수입니다.

 

입출력 예

입력 예시 출력 예시
5 3 1 2

☑ Solution

a, b = map(int, input().strip().split(' '))
print(str(int(a/b))+ " " + str(int(a%b)))

몫을 구하는 과정에서 //연산자가 있다는 걸 잊어먹고 번거로운 짓을 했다. 다음은 다시 고친 코드다.

a, b = map(int, input().strip().split(' '))
print(str(a//b)+ " " + str(a%b))

 

✔ Feedback ✔

a, b = map(int, input().strip().split(' '))
print(*divmod(a, b))
  • packing/unpacking : 쉽게 말해 묶고 푼다는 의미다. (divmod앞에 *을 붙여주지 않으면 ( ) 괄호 안에 답이 출력된다.)
  • divmod : 몫과 나머지를 구한다.

 

주의할 점 : 무조건 divmod를 사용하는 게 좋은 방법은 아니다. 가독성이나, 팀의 코드 스타일에 따라서, a//b, a%b와 같이 쓸 때가 더 좋을 수도 있다. 또한, divmod는 작은 숫자를 다룰 때는 a//b, a%b 보다 느립니다. 대신, 큰 숫자를 다룰 때는 전자가 후자보다 더 빠르다.


문제 2

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

첫 번째 숫자는 num을 나타내며, 두 번째 숫자는 base를 나타냅니다. 'base' 진법으로 표기된 숫자를 10진법 숫자 출력해보세요.

 

제한 조건

  • base는 10 이하인 자연수입니다.
  • num은 3000 이하인 자연수입니다.

입출력 예

  • 예 #1 3진법으로 표기된 12는 10진법으로 표현하면 5입니다. ( 1*3 + 2 )
  • 예 #2 5진법으로 표기된 444는 10진법으로 표현하면 124입니다. ( 455 + 4*5 + 4 )

☑ Solution

num, base = map(int, input().strip().split(' '))
print(int(str(num),base))
  • int(문자열, 기존 n진수) : 10진수로 변환할 수 있는 내장 함수다.

 

10진수로 변환할 때 첫 번째 매개변수로 문자열만 받기 때문에 str()로 변환했다.
예전에 이런 문제를 푼 적이 있어 어려움 없이 풀었다. 강의 노트에서도 내장 함수를 쓰라고 해서 의도에 맞게 잘 푼 것 같다.