1. 변수와 자료형 — 더 나아가기
기본 자료형에 익숙해졌다면, 파이썬이 기본으로 주는 내장 함수와 math 모듈로 숫자를 좀 더 능숙하게 다뤄봅니다. 코테에서 직접 구현하면 실수하기 쉬운 계산들을 한 줄로 끝낼 수 있어요.
몫과 나머지 한 번에: divmod()
//(몫)와 %(나머지)를 따로 쓸 수도 있지만, divmod(a, b)는 둘을 한 번에 튜플로 돌려줍니다.
print(divmod(17, 5)) # 출력: (3, 2) (몫 3, 나머지 2)
print(17 // 5, 17 % 5) # 출력: 3 2 (같은 결과를 따로 구한 것)
q, r = divmod(365, 100) # 튜플을 두 변수로 바로 풀어 받기
print(q, r) # 출력: 3 65
💡 숫자를 자릿수로 쪼개거나 "몇 개씩 묶고 몇 개가 남는지" 세는 문제에서 자주 등장합니다.
진법 변환
10진수를 다른 진법의 문자열로 바꾸거나, 반대로 다른 진법 문자열을 정수로 되돌릴 수 있습니다.
print(bin(10)) # 출력: 0b1010 (2진수, 앞에 0b가 붙음)
print(hex(255)) # 출력: 0xff (16진수, 앞에 0x가 붙음)
print(oct(8)) # 출력: 0o10 (8진수, 앞에 0o가 붙음)
print(int("1010", 2)) # 출력: 10 (2진수 문자열 → 정수)
print(int("ff", 16)) # 출력: 255 (16진수 문자열 → 정수)
int(문자열, 진법)은 두 번째 인자로 "이 문자열을 몇 진수로 읽을지"를 알려주는 방식입니다.
💡 2진수·16진수 변환 문제나, 특정 진법으로 계산해야 하는 문제에서 바로 써먹습니다.
math 모듈
import math 한 줄이면 수학 관련 함수들이 열립니다.
import math
print(math.gcd(12, 18)) # 출력: 6 (최대공약수)
print(math.lcm(4, 6)) # 출력: 12 (최소공배수, 파이썬 3.9 이상)
print(math.sqrt(16)) # 출력: 4.0 (제곱근, 결과는 항상 실수)
print(math.factorial(5)) # 출력: 120 (5! = 5×4×3×2×1)
print(float('inf')) # 출력: inf (무한대)
float('inf')는 "어떤 수보다도 큰 값"입니다. 가장 작은 값을 찾을 때 시작값으로 두면, 첫 비교부터 무조건 갱신되어 편리합니다.
print(1 < float('inf')) # 출력: True (무한대보다 작은 건 언제나 참)
💡 약수·배수 문제는
gcd/lcm으로 한 방에 풀리고,float('inf')는 최솟값을 찾는 문제에서 초기값 단골입니다.
그 밖의 숫자 내장 함수: abs, round, pow
print(abs(-7)) # 출력: 7 (절댓값)
print(round(3.14159, 2)) # 출력: 3.14 (소수점 둘째 자리까지 반올림)
print(round(2.5), round(3.5)) # 출력: 2 4 (0.5는 가까운 짝수로 반올림됨)
print(pow(2, 10)) # 출력: 1024 (2의 10제곱, 2 ** 10과 같음)
print(pow(2, 10, 1000)) # 출력: 24 (2의 10제곱을 1000으로 나눈 나머지)
round는 .5일 때 무조건 올림이 아니라 가까운 짝수로 맞춘다는 점(2.5 → 2)을 기억해 두세요. pow(a, b, c)는 a ** b % c와 결과가 같지만, 아주 큰 수도 중간 계산이 커지지 않아 빠릅니다.
💡 "답을 1000000007로 나눈 나머지를 구하라" 같은 문제에서
pow(밑, 지수, 나머지)형태가 정석입니다.