AgentSkillsCN

Boj Fetch

Boj Fetch

SKILL.md

boj-fetch

백준 문제 페이지를 가져와서 풀이용 빈 파일과 가이드라인 문서를 생성합니다.

Triggers

  • /boj-fetch <category> <url>
  • "백준 문제 가져와"

Usage

code
/boj-fetch math1 https://www.acmicpc.net/problem/2745

Arguments

  • category: 문제 카테고리 디렉토리 (예: math1, dp, greedy)
  • url: 백준 문제 URL

Workflow

Step 1: Parse Arguments

스킬 인자에서 카테고리와 URL 추출:

  1. 인자 파싱:
    • 인자가 없으면 AskUserQuestion으로 입력 요청
    • 인자가 부족하면 누락된 것만 요청
    • URL에서 문제 번호 추출 (예: /problem/27452745)

Step 2: Fetch from solved.ac API

solved.ac API에서 문제 정보 가져오기:

API 호출:

code
WebFetch: https://solved.ac/api/v3/problem/show?problemId={문제번호}

가져올 정보:

  • titleKo: 문제 제목 (한글)
  • level: 난이도 (0-30)

난이도 변환 로직:

code
0: Unrated → (난이도 표기 생략)
1-5: Bronze 5-1 → b5, b4, b3, b2, b1
6-10: Silver 5-1 → s5, s4, s3, s2, s1
11-15: Gold 5-1 → g5, g4, g3, g2, g1
16-20: Platinum 5-1 → p5, p4, p3, p2, p1
21-25: Diamond 5-1 → d5, d4, d3, d2, d1
26-30: Ruby 5-1 → r5, r4, r3, r2, r1

변환 예시:

  • level 1 → b5 (Bronze 5)
  • level 5 → b1 (Bronze 1)
  • level 6 → s5 (Silver 5)
  • level 10 → s1 (Silver 1)
  • level 11 → g5 (Gold 5)

Step 3: Create Directory

디렉토리 생성 (없는 경우):

code
[category]/

Step 4: Create Solution File

빈 솔루션 파일 생성:

파일명 형식:

  • 난이도 있을 때: bj_{문제번호}_{난이도}.py
  • 난이도 없을 때 (Unrated): bj_{문제번호}.py

예시:

  • math1/bj_11005_b1.py (Bronze 1)
  • math1/bj_1000_b5.py (Bronze 5)

중요: 파일은 반드시 빈 파일로 생성. 사용자가 직접 풀어야 함.

Step 5: AskUserQuestion으로 문제 내용 입력받기

백준 사이트 403 차단으로 인해 사용자에게 직접 문제 내용 입력 요청:

AskUserQuestion 사용 - 한 번에 3개 질문:

  1. 문제 설명: "백준 사이트에서 '문제' 섹션의 내용을 붙여넣어 주세요"
  2. 입력 형식: "백준 사이트에서 '입력' 섹션의 내용을 붙여넣어 주세요"
  3. 출력 형식: "백준 사이트에서 '출력' 섹션의 내용을 붙여넣어 주세요"

참고: 예제 입력/출력은 생략 (가이드 문서에서 제외)

Step 6: Create Guide Document

같은 디렉토리에 마크다운 가이드 문서 생성:

파일명 형식:

  • 난이도 있을 때: bj_{문제번호}_{제목}_{난이도}.md
  • 난이도 없을 때: bj_{문제번호}_{제목}.md

예시:

  • math1/bj_11005_진법_변환_2_b1.md
  • math1/bj_1000_A+B_b5.md

파일명의 제목은 한글/영문 그대로 사용 (공백은 언더스코어로 대체).

문서 구조:

markdown
# [문제번호] [제목]

## 문제 정보

| 항목 | 내용 |
|------|------|
| 문제 링크 | [백준 [번호]](URL) |
| 난이도 | [solved.ac에서 가져온 난이도, 예: Bronze 1] |

## 문제 설명

[Step 5에서 사용자가 입력한 문제 설명]

## 입력

[Step 5에서 사용자가 입력한 입력 형식]

## 출력

[Step 5에서 사용자가 입력한 출력 형식]

---

## PS 가이드라인

### 알고리즘 분류

이 문제에서 활용할 수 있는 알고리즘/자료구조:
- [관련 알고리즘 카테고리 1-3개 제시]
- (정답을 직접 알려주지 않되, 방향성 제시)

### 접근법 힌트

스스로 풀이를 구상할 수 있도록 단계별 사고 유도:

1. **입력 분석**: [입력의 특성과 범위를 어떻게 해석해야 하는가?]
2. **핵심 질문**: [이 문제를 풀기 위해 스스로에게 던져야 할 질문]
3. **패턴 인식**: [유사한 유형의 문제에서 자주 쓰이는 접근법 암시]

### 엣지 케이스 체크리스트

구현 시 반드시 확인해야 할 경계 조건:
- [ ] [입력 범위의 최솟값/최댓값 처리]
- [ ] [특수 케이스 - 0, 1, 빈 값 등]
- [ ] [오버플로우 가능성]
- [ ] [시간복잡도 제약 확인]

### 생각해볼 점

문제 해결 과정에서 스스로 답해보면 좋은 질문들:
- [핵심 아이디어를 찾기 위한 유도 질문 1]
- [효율적인 구현을 위한 유도 질문 2]
- [예제를 분석하며 패턴을 찾는 질문 3]

---

## 구현 가이드라인

[문제 특성에 맞게 입력/로직/출력 섹션을 작성. 생소한 문법만 설명.]

### # 입력

```python
[문제에 맞는 입력 코드]

생소한문법: 한 줄 설명 (필요시만)

# 로직

python
[핵심 로직에 필요한 문법 예시]

생소한문법: 한 줄 설명 (필요시만)

# 출력

python
[문제에 맞는 출력 코드]

생소한문법: 한 줄 설명 (필요시만)

code

**기본 문법 (설명 생략):**
- 입출력: `print`, `input`, `int()`, `str()`
- 연산: `+`, `-`, `*`, `/`, `%`, `//`
- 제어문: `for`, `while`, `if`
- 리스트 기본: `len()`, `range()`, `append()`, `pop()`

**생소한 문법 (설명 필요):**
- `map()`, `zip()`, `enumerate()`
- `ord()`, `chr()`
- 슬라이싱 트릭: `[::-1]`
- `''.join()`, `split()` 특수 용법
- `sys.stdin.readline`
- `collections`, `itertools` 등 모듈

**가이드라인 작성 원칙:**
- 정답 코드나 핵심 알고리즘을 직접 알려주지 않음
- 사용자가 스스로 생각할 수 있도록 질문 형태로 유도
- 방향성과 힌트는 제공하되, 최종 답은 스스로 찾게 함
- 엣지 케이스는 구체적으로 명시하여 디버깅 시간 절약

### Step 7: Confirm Creation

생성 결과 출력:
- 생성된 파일 목록
  - `[category]/bj_[number]_[난이도].py` (빈 솔루션 파일)
  - `[category]/bj_[number]_[제목]_[난이도].md` (가이드 문서)
- 문제 제목
- 난이도
- 간단한 문제 요약

## Notes

- 솔루션 코드는 절대 작성하지 않음
- 카테고리는 기존 디렉토리 사용 권장, 없으면 새로 생성
- 가이드라인은 힌트 수준으로만 작성, 정답 제공 금지
- solved.ac API 호출 실패 시 난이도 없이 진행