문제 분류 수업 진도 대회 채점현황 순위 질문게시판
게임
스도쿠 타이핑 리듬 타자게임 타이핑 테트리스 타이핑 인베이더 타이핑 지뢰찾기 8192 공룡게임 타이핑 플래피버드 랭킹
로그인

PyPy3 채점 언어 추가 안내 및 Python 3와의 성능 차이 & 선택 가이드

suakii 2026-09-06 21:50:43

채점 환경에 PyPy3 언어가 새로 추가되었습니다!

BFStudy OJ에서 이제 Python 3뿐만 아니라 JIT 컴파일 기반의 고속 실행 엔진인 PyPy3를 선택하여 문제를 제출하실 수 있습니다.
두 언어는 완전히 동일한 파이썬 문법을 지원하지만, 내부 구동 방식이 달라 문제의 유형과 연산량에 따라 실행 속도와 메모리 사용량에서 큰 차이가 발생합니다.
제출 시 어떤 언어를 선택해야 유리한지 핵심 차이점과 실전 가이드를 안내해 드립니다.


1. 핵심 차이 비교: 인터프리터 vs JIT 컴파일러

구분 Python 3 (CPython) PyPy3
실행 방식 코드를 한 줄씩 해석하는 순수 인터프리터 JIT (Just-In-Time) 컴파일러로 기계어 즉각 변환
초기 기동 시간 매우 빠름 (오버헤드 거의 없음) 약간 느림 (JIT 런타임 구동 30~40ms)
대량 반복문 속도 보통 (루프 10만 회 이상 시 느려짐) 압도적 (C/C++ 수준에 근접, 5~10배 빠름)
기본 메모리 가벼움 (15MB ~ 30MB 수준) 무거움 (기본 60MB ~ 100MB 이상 점유)

2. 언제 어떤 언어를 사용해야 할까?

PyPy3 제출을 적극 권장하는 경우

  • 단순 반복문(for, while)이 수십만 ~ 수백만 번 이상 돌아갈 때 (소수 판별, 소인수분해, 완전탐색/브루트포스, 2중/3중 루프)
  • 동적 계획법(DP)이나 복잡한 사칙연산 테이블 계산
  • Python 3로 풀었을 때 아슬아슬하게 시간 초과(TLE)가 발생할 때 → PyPy3로 제출하면 대부분 즉시 AC를 받습니다.

Python 3 제출이 더 유리한 경우

  • 연산량이 적은 단순 입출력 및 기초 조건문/문자열 조작 문제 (반복문이 적은 문제는 초기 구동이 빠른 Python 3가 판정 시간이 더 짧습니다.)
  • 메모리 제한이 매우 타이트한 문제 (예: 64MB 이하) (PyPy3는 JIT 컴파일 캐시로 인해 메모리를 더 많이 소모하므로 메모리 초과(MLE) 위험이 있습니다.)
  • 깊은 재귀 호출(DFS, 백트래킹, 트리 순회 등) (PyPy3는 재귀 스택 오버헤드가 크므로, 재귀 깊이가 깊은 경우 Python 3에 sys.setrecursionlimit()을 사용하는 것이 더 안전합니다.)

3. 실제 채점 성능 비교 (3107번 소인수분해)

자연수 $N \le 10^{12}$ 범위에서 $O(\sqrt{N})$ 알고리즘(최대 1,000,000회 루프)을 수행했을 때의 실측 채점 결과입니다:

  • Python 3: 114ms ~ 120ms (한 줄씩 순차 해석)
  • PyPy3: 41ms ~ 49ms (루프가 JIT에 의해 기계어로 변환되어 약 2.5배 ~ 3배 고속 처리)

요약

  1. 루프와 연산이 많은 알고리즘 문제 → PyPy3 선택
  2. 메모리 제한이 작거나 깊은 재귀 탐색 → Python 3 선택

문제의 조건과 알고리즘 특성에 맞춰 두 언어를 전략적으로 활용해 보시기 바랍니다.

NOTICE  —  BFStudy OJ 정보샘
애들아, 문제 많이 풀고 게임 잠깐 하는거지?
— 정보샘