피드로 돌아가기
How I Built a 24 Game Solver: Brute-Force Meets Elegance in TypeScript
Dev.toDev.to
Backend

Brute-Force와 Catalan Number 기반의 1ms 미만 24 게임 솔버 구현

How I Built a 24 Game Solver: Brute-Force Meets Elegance in TypeScript

杜涛2026년 6월 13일6intermediate

Context

4개의 숫자와 연산자를 조합해 24를 만드는 조합 최적화 문제 분석. 단순 연산 조합을 넘어 괄호 배치에 따른 연산 우선순위와 Floating-point 정밀도 제어라는 기술적 제약 해결 필요.

Technical Solution

  • Catalan Number(C₃) 기반의 5가지 Binary Tree 구조를 정의하여 모든 가능한 Parenthesization 패턴 전수 조사
  • Set 자료구조를 활용한 Permutations 중복 제거로 입력값 5, 5, 5, 1 기준 연산 횟수를 24회에서 4회로 최적화
  • Floating-point 오차 해결을 위해 직접 비교(===) 대신 Epsilon Comparison(0.0001) 방식을 도입하여 분수 연산 결과의 정확성 확보
  • Division by Zero 발생 시 Infinity 반환 및 try-catch 기반의 Short-circuiting 구조를 통한 예외 처리 효율화
  • 4개 숫자라는 제한적 Search Space(최대 7,680회 연산) 특성을 고려하여 복잡한 Recursive Reduction 대신 Brute-Force 전략 채택

- 소수점 연산 결과 비교 시 반드시 허용 오차(Epsilon)를 정의하여 비교할 것 - 조합론적 문제 해결 시 Catalan Number 등 수학적 모델을 통해 누락 없는 케이스 정의 가능 여부를 검토할 것 - 중복 데이터가 포함된 Permutation 생성 시 Set을 통한 Deduplication으로 불필요한 연산 낭비를 방지할 것

원문 읽기