[Java vs Python] Math 함수 한 장 정리

NANO·2026년 9월 30일
post-thumbnail

알고리즘 Cheat Sheet 시리즈는 코딩 테스트를 풀다가 "이거 자바에선 뭐였지?", "파이썬은 어떻게 했더라?" 싶을 때 바로 펼쳐 보려고 만든 개인 참고용 정리입니다.
Java와 Python을 나란히 놓고, 문법 차이 때문에 실수하기 쉬운 부분만 짧게 정리합니다.

이번 주제는 Math입니다.
자바는 대부분 Math 클래스에 모여 있고, 파이썬은 내장 함수와 math 모듈에 나뉘어 있습니다.
함수 이름은 비슷하지만 반환 타입과 반올림 방식이 달라서 실수하기 쉽습니다.

import math   # 파이썬은 math 모듈을 import 해야 한다 (abs, max, min, pow, round는 내장)

1. 기본 연산

기능자바파이썬비고
절댓값Math.abs(x)abs(x)
최댓값Math.max(a, b)max(a, b, c...) / max(lst)자바는 인자 2개만
최솟값Math.min(a, b)min(a, b, c...) / min(lst)자바는 인자 2개만
거듭제곱Math.pow(a, b) → doublea ** b / pow(a, b) → int
제곱근Math.sqrt(x) → doublemath.sqrt(x) → float
정수 제곱근(int) Math.sqrt(x)math.isqrt(x) → int파이썬 3.8+
세제곱근Math.cbrt(x)math.cbrt(x)파이썬 3.11+
int big = Math.max(a, Math.max(b, c));     // 3개 이상은 중첩
int p = (int) Math.pow(2, 10);             // 1024, double이라 형변환 필요
big = max(a, b, c)
p = 2 ** 10                                # 1024, 결과가 바로 int

2. 반올림/올림/내림

기능자바파이썬
올림Math.ceil(x) → doublemath.ceil(x) → int
내림Math.floor(x) → doublemath.floor(x) → int
반올림Math.round(x) → longround(x) → int
소수점 버림(int) xint(x) / math.trunc(x)
소수 n째 자리 반올림Math.round(x * 100) / 100.0round(x, 2)
소수 n째 자리까지 출력String.format("%.2f", x)f"{x:.2f}"

반올림 결과가 다른 거 주의!!

값자바 Math.round파이썬 round
2.532
3.544
-2.5-2-2
  • 자바 Math.round(x)는 floor(x + 0.5) 방식이다. 그래서 -2.5는 -2가 된다.
  • 파이썬 round()는 은행가 반올림이라 .5일 때 짝수 쪽으로 간다.
  • 사사오입이 필요하면 파이썬은 math.floor(x + 0.5)를 쓰거나 decimal 모듈의 ROUND_HALF_UP을 쓴다.

정수 올림 나눗셈 (코테 단골)

a / b를 올림하고 싶을 때, 실수로 바꾸지 않고 정수만으로 계산하는 방법이다.

int q = (a + b - 1) / b;        // a, b가 양수일 때
q = (a + b - 1) // b            # a, b가 양수일 때
q = -(-a // b)                  # 음수에서도 동작

3. 몫과 나머지

기능자바파이썬
몫 (0 방향 버림)a / bint(a / b)
몫 (내림)Math.floorDiv(a, b)a // b
나머지 (부호가 a를 따름)a % bmath.fmod(a, b)
나머지 (부호가 b를 따름)Math.floorMod(a, b)a % b
몫과 나머지 한 번에-divmod(a, b)
-7 / 2;                  // -3
-7 % 2;                  // -1
Math.floorDiv(-7, 2);    // -4  (파이썬 // 와 같음)
Math.floorMod(-7, 2);    // 1   (파이썬 % 와 같음)

음수 인덱스를 순환시킬 때((i - 1) % n) 자바는 음수가 나올 수 있다. Math.floorMod(i - 1, n) 또는 ((i - 1) % n + n) % n을 쓰자.


4. 큰 수 · 오버플로우

항목자바파이썬
정수 최댓값Integer.MAX_VALUE (약 21억)
Long.MAX_VALUE (약 922경)
제한 없음
무한대Integer.MAX_VALUE 등으로 대체
Double.POSITIVE_INFINITY
float('inf') / math.inf
오버플로우 감지Math.addExact(a, b)
Math.multiplyExact(a, b)
필요 없음
아주 큰 수BigInteger그냥 int

거듭제곱 나머지 (모듈러 거듭제곱)

a^b % mod처럼 결과가 큰 거듭제곱은 Math.pow를 쓰면 안 된다. double이라 정밀도가 깨진다.

// 빠른 거듭제곱 (분할 정복)
static long modPow(long a, long b, long mod) {
    long result = 1;
    a %= mod;
    while (b > 0) {
        if ((b & 1) == 1) result = result * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return result;
}
pow(a, b, mod)   # 내장 함수가 세 번째 인자로 모듈러를 지원한다

5. 정수론 · 조합

기능자바파이썬
최대공약수직접 구현 / BigInteger.gcdmath.gcd(a, b)
최소공배수a / gcd(a, b) * bmath.lcm(a, b) (3.9+)
팩토리얼직접 구현math.factorial(n)
조합 nCr직접 구현math.comb(n, r) (3.8+)
순열 nPr직접 구현math.perm(n, r) (3.8+)
static int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
}

static int lcm(int a, int b) {
    return a / gcd(a, b) * b;   // 곱하기 먼저 하면 오버플로우 위험
}
math.gcd(12, 18)    # 6
math.lcm(12, 18)    # 36
math.comb(5, 2)     # 10

6. 로그 · 기타

기능자바파이썬
자연로그Math.log(x)math.log(x)
상용로그Math.log10(x)math.log10(x)
밑이 2인 로그Math.log(x) / Math.log(2)math.log2(x)
임의의 밑Math.log(x) / Math.log(b)math.log(x, b)
원주율Math.PImath.pi
부호Math.signum(x)(x > 0) - (x < 0)
난수 [0, 1)Math.random()random.random()
정수 난수 [a, b](int) (Math.random() * (b - a + 1)) + arandom.randint(a, b)

7. 배열 집계

기능자바파이썬
합계Arrays.stream(arr).sum()sum(arr)
최댓값Arrays.stream(arr).max().getAsInt()max(arr)
최솟값Arrays.stream(arr).min().getAsInt()min(arr)
평균Arrays.stream(arr).average().getAsDouble()sum(arr) / len(arr)

자바 스트림은 편하지만 반복 호출하면 느리다. 반복문 안에서는 for문으로 직접 계산하는 게 안전하다.


💡 이것만 기억하자

  1. 자바 Math는 대부분 double을 반환한다. pow, sqrt, ceil, floor는 (int)로 형변환하고, round는 long이다. 파이썬 math.ceil / math.floor는 바로 int다.
  2. 반올림이 다르다! 2.5는 자바 3, 파이썬 2(은행가 반올림)
  3. 음수 몫과 나머지. 파이썬 //, %와 같게 하려면 자바는 Math.floorDiv, Math.floorMod를 쓴다.
  4. 큰 거듭제곱에 Math.pow 금지. 자바는 빠른 거듭제곱을 직접 구현하고, 파이썬은 pow(a, b, mod)를 쓴다.
  5. 자바는 오버플로우를 조심! 곱셈은 long으로, 최소공배수는 나누기를 먼저!
  6. gcd, 조합, 팩토리얼은 파이썬만 내장. 자바는 직접 구현한다.
  7. 사실 나도 아직 안 써본 게 많다...언젠가는 쓰겠지 싶어서 정리했다.
profile
즐거운 토마토

0개의 댓글