Skip to content

시간/공간 복잡도 자동 분석 #8

@devchanki

Description

@devchanki

목표

DaleStudy 알고리즘 PR에 각 솔루션 파일의 시간/공간 복잡도를 자동 분석하여 댓글로 제공한다.

요구사항

R1. 복잡도 자동 계산

  • 트리거: PR opened / reopened / synchronize
  • 대상: 솔루션 파일 (기존 SOLUTION_PATH_REGEX 재사용)
  • 출력: 파일별 review comment (subject_type: "file")
    • 시간복잡도 (Big-O)
    • 공간복잡도 (Big-O)
    • 1-2줄 근거

R2. 기존 주석 검증

  • 주석 포맷: 자유 포맷 허용 (언어별 주석 스타일 자동 인식)
    • 예시: // TC: O(n), # 시간복잡도: O(n log n), /* Space: O(1) */
    • 정해진 포맷 없이 유연하게 파싱
  • 주석이 있는 경우:
    • 유저 분석값과 실제 계산값을 테이블로 비교
    • 일치 시 ✅, 불일치 시 ❌ 표시
    • 불일치 시 다시 풀어보는 것을 권장하는 톤으로 피드백
  • 주석이 없는 경우: R1만 실행 (계산값만 제공) + 주석 작성 권장 안내

R3. 개선 제안

  • 의미 있는 개선 여지(최소 한 단계 이상, 예: O(n²) → O(n))만 제안
  • 문제 제약조건을 모를 수 있으므로 "고려해볼 만한 대안" 톤 유지
  • 현재 구현이 적절하면 "현재 구현이 적절해 보입니다" 명시

댓글 본문 포맷 (Output Format)

R1/R2/R3을 하나의 댓글에 통합하여 아래 포맷으로 작성한다.

케이스 1: 유저 주석 있음 + 일치

<!-- dalestudy-complexity-analysis -->
### 📊 시간/공간 복잡도 분석

| | 유저 분석 | 실제 분석 | 결과 |
|---|---|---|---|
| **Time** | O(n) | O(n) ||
| **Space** | O(1) | O(1) ||

**피드백**: 정확합니다! 배열을 한 번 순회(O(n))하며 상수 공간만 사용하는 최적의 풀이입니다.

케이스 2: 유저 주석 있음 + 불일치

<!-- dalestudy-complexity-analysis -->
### 📊 시간/공간 복잡도 분석

| | 유저 분석 | 실제 분석 | 결과 |
|---|---|---|---|
| **Time** | O(n) | O(n log n) ||
| **Space** | O(1) | O(n) ||

**피드백**: sort()를 사용하고 있어 시간 복잡도는 O(n log n)이며, 정렬 과정에서 O(n) 추가 공간이 필요합니다. 한번 다시 분석해보시는 것을 권장드립니다!

케이스 3: 유저 주석 없음 (복잡도 분석만 제공)

<!-- dalestudy-complexity-analysis -->
### 📊 시간/공간 복잡도 분석

| | 복잡도 |
|---|---|
| **Time** | O(n) |
| **Space** | O(1) |

**피드백**: 배열을 한 번 순회하며 최솟값과 최대 이익을 갱신하는 방식입니다.

> 💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!

비기능 요구사항

  • Cloudflare Workers 환경 (Node.js 모듈 불가, Web 표준 API만)
  • 기존 OpenAI 유틸/패턴 재사용 (gpt-4.1-nano)
  • 중복 댓글 방지 (HTML 마커: <!-- dalestudy-complexity-analysis -->)
  • 기존 패턴 태깅과 병렬 실행 (Promise.allSettled)
  • Non-blocking: 실패 시 전체 웹훅 처리 중단하지 않음

결정 완료

  • 주석 포맷 표준: 자유 포맷 허용. 정해진 규칙 없이 유연하게 파싱
  • R3 포함 여부: R1+R2+R3 모두 MVP에 포함
  • 댓글 구조: R1/R2/R3을 한 댓글에 통합 (위 Output Format 참조)
  • 불일치 시 톤 강도: 다시 풀어보는 것을 권장하는 톤
  • 주석 파싱 실패 처리: 자유 포맷이므로 유연하게 대처. 파싱 불가 시 주석 없음으로 간주하여 분석값만 제공

참고

  • 상세 리서치는 댓글의 Research.md 참조
  • 가장 유사한 기존 구현: handlers/tag-patterns.js

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

Status

In Progress

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions