---
name: algorithm-post-writing
description: >-
  알고리즘 문제 풀이(BOJ) 글 작성 가이드. 표준화된 문제 정보, Mermaid 기반 로직 시각화, 복잡도 분석 표,
  코너 케이스 체크리스트, 50개 이상 태그 작성 규칙을 포함한다. content/collection/Algorithm/ 하위
  포스트 작성·보강 시 사용한다.
---

# 알고리즘 문제 풀이 작성 가이드

`content/collection/Algorithm/`에 BOJ 등 알고리즘 문제 풀이 포스트를 작성할 때 따르는 제목·Front Matter·본문 구조·체크리스트다. [`blog-post-writing`](../blog-post-writing/SKILL.md), [`collection-writing-standards`](../collection-writing-standards/SKILL.md)와 함께 적용한다.

---

## 제목/메타 규칙 (필수)

- **카테고리 접두어**: `[Algorithm]` 사용
- **메인 제목**: `[Algorithm] {언어} 백준 {번호}번: {문제명}`
- **언어 표기**: 단일 언어(`C++`) 또는 다중 언어(`C++ / Python`) 병기 가능
- **총 길이**: 70자 이내

## 날짜/버전 관리 (필수)

- `date`, `lastmod`는 작성/수정 당일(로컬 타임존) 날짜 사용
- 폴더명 날짜와 Front Matter `date`는 반드시 동일
- 의미 있는 풀이 개선이나 재채점 시 `lastmod` 갱신

## 폴더명 규칙 (필수)

```
YYYY-MM-DD-BOJ-문제번호-문제명-슬러그
```

**예시**:
- `2025-08-12-BOJ-31403-a-plus-b-minus-c-cpp-python-solution`
- `2025-08-08-BOJ-1605-longest-repeated-substring`

**구성 요소**:
- **날짜**: `YYYY-MM-DD`
- **식별자**: `BOJ-{번호}`
- **슬러그**: 문제의 영문명 또는 핵심 키워드를 소문자 하이픈(`-`)으로 연결. 구현 언어/기법을 명시하는 접미사(`-cpp-solution`, `-cpp-python-solution` 등)를 포함할 수 있다.

## 이미지 규칙 (워드클라우드)

- 워드클라우드 생성기는 각 글의 `index.md` 내용을 읽어 `wordcloud.png` 이미지를 생성한다.
- Front Matter에는 `image: "wordcloud.png"`로 고정 사용한다.
- 생성 방법: 프로젝트 루트에서 아래 명령 실행 (경로는 해당 콘텐츠 번들 폴더):

```bash
python script/wordcloud_generator.py "content/collection/Algorithm/2026/YYYY-MM-DD-BOJ-번호-슬러그"
```

- 실제 이미지 경로 예: `content/collection/Algorithm/2026/2026-03-10-BOJ-8927-squares-cpp-python-solution/wordcloud.png`

## Front Matter 템플릿

```yaml
---
title: "[Algorithm] C++ / Python 백준 1234번: 문제 이름"
description: "핵심 알고리즘(예: 다익스트라, DP)을 이용한 O(N log N) 풀이입니다. 접근 방식, 정당성 증명, 메모리 최적화 기법 및 코너 케이스(예: N=1) 처리를 상세히 다룹니다."
date: {{ .Date }}
lastmod: {{ .Date }}
categories:
- Algorithm
- 주요알고리즘 # 예: Graph, DP, Greedy
tags:  # 최소 50개 이상 (한글/영어 쌍으로 작성 권장)
- Algorithm
- 알고리즘
- BOJ
- 백준
- Problem-1234
- C++
- Python
- 주요알고리즘(영)
- 주요알고리즘(한)
- 세부기법(영)
- 세부기법(한)
- 자료구조(영)
- 자료구조(한)
- 시간복잡도
- Time Complexity
- 공간복잡도
- Space Complexity
- 최적화
- Optimization
- 구현
- Implementation
- 문제해결
- Problem Solving
- 코딩테스트
- Coding Test
- 엣지케이스
- Edge Case
image: "wordcloud.png"
---
```

## 본문 구조 가이드

### 도입부

문제의 핵심 유형(예: 그래프 탐색, 동적 계획법)과 난이도를 간단히 언급하고, 독자가 이 글을 통해 얻을 수 있는 핵심 인사이트(예: "메모리 초과를 피하는 비트마스킹 기법")를 1-2문장으로 소개한다.

### 문제 정보 요약

```markdown
## 문제 정보

**문제 링크**: [https://www.acmicpc.net/problem/{번호}](https://www.acmicpc.net/problem/{번호})

**문제 요약**:
입력과 출력의 관계, 핵심 요구사항을 2-4 문장으로 명확하게 요약한다. 불필요한 배경 스토리는 배제하고 논리적 제약 조건 위주로 서술한다.

**제한 조건**:
- 시간 제한: X초 (추가 시간 여부)
- 메모리 제한: XXXMB
- 입력 크기: $1 \le N \le 100,000$
```

### 입출력 예제

```markdown
## 입출력 예제

**입력 1**:
```text
(입력 데이터)
```

**출력 1**:
```text
(출력 데이터)
```

**(선택) 설명**: 예제에 대한 간단한 해설이 필요한 경우 추가
```

### 접근 방식 및 로직 설계

문제를 해결하기 위해 발견해야 하는 수학적 성질이나 불변식(Invariant)을 먼저 문단으로 서술한다.
- 예: "이 문제는 최적 부분 구조를 가지므로 DP로 접근 가능하다."
- 예: "N이 작으므로 비트마스크를 이용한 완전 탐색이 가능하다."

이어서 Mermaid flowchart로 알고리즘 설계를 시각화한다 ([`rules-that-must-be-followed`](../rules-that-must-be-followed/SKILL.md) 문법 준수):

```mermaid
flowchart TD
    A[시작: 입력 파싱] --> B{N의 크기 확인}
    B -- N <= 1000 --> C[O(N^2) DP 수행]
    B -- N > 1000 --> D[O(N log N) 그리디 수행]
    C --> E[결과 저장]
    D --> E
    E --> F[출력]
```

이후 단계별 로직을 정리한다:
1. **전처리**: 데이터를 정렬하거나 초기화하는 과정
2. **메인 로직**: 상태 전이, 그래프 탐색, 쿼리 처리 등 핵심 과정
3. **후처리**: 최종 답안 도출 및 출력 형식 맞춤

### 복잡도 분석

```markdown
## 복잡도 분석

| 항목 | 복잡도 | 비고 |
|---|---|---|
| **시간 복잡도** | $O(N \log N)$ | 정렬($N \log N$) + 스위핑($N$) |
| **공간 복잡도** | $O(N)$ | 입력 배열 및 DP 테이블 저장 |
```

### 구현 코드

가능한 경우 C++와 Python 코드를 모두 제공한다. 코드 최상단에 출처 주석(`42jerrykim.github.io에서 더 많은 정보를 확인할 수 있다`)을 포함한다.

```markdown
## 구현 코드

### C++

```cpp
// 42jerrykim.github.io에서 더 많은 정보를 확인할 수 있다
#include <bits/stdc++.h>
using namespace std;

// 전역 변수 및 자료구조 정의

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // 입력 및 로직 구현

    return 0;
}
```

### Python (선택)

```python
# 42jerrykim.github.io에서 더 많은 정보를 확인할 수 있다
import sys
input = sys.stdin.readline

# 로직 구현
```
```

### 코너 케이스 및 실수 포인트

```markdown
## 코너 케이스 및 실수 포인트

| 케이스 | 설명 | 처리 방법 |
|---|---|---|
| **N=1** | 최소 입력 크기 | 반복문 범위 확인, 예외 처리 |
| **모든 값이 동일** | 엣지 케이스 | 로직이 올바른 값(0 또는 N)을 반환하는지 확인 |
| **오버플로우** | 답이 $2^{31}$ 초과 | `long long` (C++) 사용 |
| **비연결 그래프** | 그래프 문제 | 모든 컴포넌트 방문 여부 체크 |
```

### 마무리 (선택)

문제 풀이 후기, 더 최적화할 수 있는 여지, 혹은 유사한 문제 추천 등을 작성한다.

### 참고 문헌 및 출처

```markdown
## 참고 문헌 및 출처

- [백준 {번호}번 문제](URL)
- [관련 알고리즘 이론 (위키백과 등)](URL)
```

## 작성 체크리스트

- [ ] 폴더명이 `YYYY-MM-DD-BOJ-번호-슬러그` 형식인가?
- [ ] Front Matter의 tags가 50개 이상인가? (한글/영어 쌍 활용)
- [ ] description이 150자 내외로 핵심을 잘 요약했는가?
- [ ] `image: "wordcloud.png"`가 설정되어 있고, `python script/wordcloud_generator.py "<콘텐츠 번들 경로>"`로 워드클라우드를 생성했는가?
- [ ] Mermaid 다이어그램으로 로직을 시각화했는가?
- [ ] 복잡도 분석이 표(Table) 형식으로 작성되었는가?
- [ ] 코드 최상단에 출처 주석이 포함되었는가?
- [ ] 코너 케이스 체크리스트가 포함되었는가?
- [ ] `date`와 `lastmod`가 오늘 날짜로 설정되었는가?
