벤치마크 · coding
LiveCodeBench
LiveCodeBench는 대규모 언어 모델이 competitive programming 문제를 얼마나 잘 푸는지 평가하며, 학습 데이터 오염을 피하기 위해 최근 대회에서 지속적으로 수집한 코딩 문제를 사용합니다. 핵심 지표는 pass@1로, 모델이 첫 시도에서 정확히 풀어낸 문제의 비율입니다.
자세히 보기
- 예시
- 전형적인 항목은 대회 스타일의 코딩 문제입니다. 예를 들어 정수 배열이 주어졌을 때 가장 긴 순증가 부분 수열의 길이를 반환하는 함수를 작성하는 문제를, 모델이 동작하는 코드를 생성해 풀어야 합니다.
- 채점 방식
- 생성된 각 해답은 해당 문제의 테스트 케이스로 실행되며, pass@1은 모델의 첫 제출이 모든 테스트를 통과한 문제의 비율입니다.
- 검증 방식
- 생성된 코드가 그 문제의 모든 비공개 및 공개 테스트 케이스를 통과하면 해답이 자동으로 인정됩니다. 사람의 심사나 정확한 텍스트 일치는 사용되지 않습니다.
- 왜 중요한가
- 문제가 모델의 학습 마감 이후에 공개된 대회에서 나오기 때문에, LiveCodeBench는 암기한 답이 아니라 실제 추론 및 코딩 능력을 측정하며, 따라서 오염에 강한 신뢰할 수 있는 코딩 실력 지표가 됩니다.
예제 풀이
문제
경쟁 프로그래밍 형식(stdin/stdout). n개의 정수가 주어질 때, i < j이면서 nums[i] + nums[j]가 짝수인 쌍 (i, j)의 개수를 세시오. 입력: 첫 줄에 n, 둘째 줄에 공백으로 구분된 n개의 정수; 그 개수를 출력하시오.
해답
import sys
def main():
data = sys.stdin.read().split()
n = int(data[0])
nums = list(map(int, data[1:1 + n]))
odd = sum(x % 2 for x in nums)
even = n - odd
print(odd * (odd - 1) // 2 + even * (even - 1) // 2)
main()
풀이
합이 짝수인 것은 두 수의 홀짝성이 같을 때뿐이므로 답은 C(evens, 2) + C(odds, 2)이며, 홀짝을 세는 데 O(n)이 든다. LiveCodeBench는 모델의 프로그램을 숨겨진 단위 테스트로 실행해 pass@1로 채점한다 — 모든 테스트를 통과해야만 정답으로 인정된다.