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.52)을 기억해 두세요. pow(a, b, c)a ** b % c와 결과가 같지만, 아주 큰 수도 중간 계산이 커지지 않아 빠릅니다.

💡 "답을 1000000007로 나눈 나머지를 구하라" 같은 문제에서 pow(밑, 지수, 나머지) 형태가 정석입니다.