Skip to content

Commit 25879d7

Browse files
committed
refactor: 전체 문서 및 코드 구조 개편
1 parent c5f1005 commit 25879d7

35 files changed

+568
-534
lines changed

README.md

Lines changed: 64 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,23 @@ solved-ac/
3333
├── CMakeLists.txt # 프로젝트 루트 CMake 설정
3434
├── src/ # 소스 코드
3535
│ ├── CMakeLists.txt # 소스 코드 빌드 설정
36-
│ ├── main.cc # 메인 실행 파일
37-
│ ├── solved.h # 헤더 파일
38-
│ └── solved.cc # 구현 파일
36+
│ ├── main.cc # 메인 실행 파일 (간소화됨)
37+
│ ├── problem_manager.h/.cc # 문제 관리자 클래스
38+
│ └── problems/ # 문제별 개별 파일들
39+
│ ├── problem_1000.h/.cc
40+
│ ├── problem_1001.h/.cc
41+
│ ├── problem_2438.h/.cc
42+
│ ├── problem_2439.h/.cc
43+
│ ├── problem_2440.h/.cc
44+
│ ├── problem_2441.h/.cc
45+
│ ├── problem_2442.h/.cc
46+
│ ├── problem_2443.h/.cc
47+
│ ├── problem_2739.h/.cc
48+
│ ├── problem_2741.h/.cc
49+
│ ├── problem_2742.h/.cc
50+
│ ├── problem_8393.h/.cc
51+
│ ├── problem_10950.h/.cc
52+
│ └── problem_10952.h/.cc
3953
├── build/ # 빌드 출력 디렉토리
4054
├── .github/ # GitHub 관련 설정
4155
├── .gitignore # Git 무시 파일 목록
@@ -56,6 +70,22 @@ solved-ac/
5670
- CMake를 활용한 실전 개발 환경 경험
5771
- Git으로 버전 관리하며 성장 로그 남기기
5872

73+
## 🔧 리팩토링 완료
74+
75+
프로젝트가 **모듈화된 구조**로 리팩토링되었습니다:
76+
77+
### ✅ 개선 사항
78+
- **main.cc 간소화**: 178줄 → 7줄로 대폭 단축
79+
- **문제별 파일 분리**: 각 문제가 독립적인 `.h/.cc` 파일로 분리
80+
- **ProblemManager 도입**: 문제들을 중앙에서 관리하는 시스템
81+
- **확장성 향상**: 새 문제 추가가 매우 간단해짐
82+
- **유지보수성 개선**: 각 문제가 독립적이라 수정이 용이함
83+
84+
### 🏗️ 새로운 아키텍처
85+
- **단일 책임 원칙**: 각 파일이 하나의 문제만 담당
86+
- **개방-폐쇄 원칙**: 새 문제 추가 시 기존 코드 수정 불필요
87+
- **의존성 역전**: ProblemManager가 문제들을 추상화하여 관리
88+
5989
---
6090

6191
## 🛠️ 빌드 방법
@@ -96,10 +126,6 @@ cmake --build .
96126
./src/solved-ac
97127
```
98128

99-
---
100-
101-
102-
103129
---
104130

105131
## 🌊 Commit Convention (커밋 규칙)
@@ -108,41 +134,53 @@ cmake --build .
108134
|------|------|
109135
| `feat` | 새로운 문제 풀이 추가 |
110136
| `docs` | 문서 수정 또는 주석 추가 |
111-
| `refactor` | 기존 코드 개선 |
137+
| `refactor` | 기존 코드 개선 또는 리팩토링 |
112138
| `fix` | 버그 수정 또는 로직 수정 |
113-
114139
| `chore` | 설정 파일, 빌드 설정 등 변경 |
115140

116141
**예시**:
117142

118143
```bash
119144
git commit -m "feat: solved.ac 1000번 문제 풀이 완료"
120-
git commit -m "docs: 2557번 문제 풀이 방법 주석 추가"
121-
git commit -m "refactor: 알고리즘 최적화 적용"
145+
git commit -m "docs: README.md 프로젝트 구조 업데이트"
146+
git commit -m "refactor: 모듈화된 구조로 리팩토링 완료"
147+
git commit -m "fix: 2438번 문제 출력 형식 수정"
122148
```
123149

124150
---
125151

126-
## 📖 문제 해결 현황
152+
## 📝 사용법
127153

128-
| 문제 번호 | 제목 | 난이도 | 상태 | 풀이 방법 |
129-
|-----------|------|--------|------|-----------|
130-
| 1001 | A-B | 🟢 Bronze V | ✅ 완료 | 기본 입출력 |
131-
| 2741 | N 찍기 | 🟢 Bronze V | ✅ 완료 | 반복문, 기본 입출력 |
132-
| ... | ... | ... | ... | ... |
154+
### 새로운 문제 추가하기
133155

134-
**상태 표시**:
135-
- ✅ 완료
136-
- 🔄 진행중
137-
- ⏳ 계획중
156+
1. **문제 파일 생성**: `src/problems/` 디렉토리에 `problem_XXXX.h``problem_XXXX.cc` 파일 생성
157+
2. **함수 구현**: `solve_problem_XXXX()` 함수를 구현
158+
3. **ProblemManager에 등록**: `src/problem_manager.cc`에서 문제 번호와 함수를 등록
138159

139-
---
160+
**예시**:
161+
```cpp
162+
// src/problems/problem_2557.h
163+
#ifndef PROBLEM_2557_H
164+
#define PROBLEM_2557_H
165+
void solve_problem_2557();
166+
#endif
167+
168+
// src/problems/problem_2557.cc
169+
#include "problem_2557.h"
170+
#include <iostream>
171+
172+
void solve_problem_2557() {
173+
std::cout << "=== 2557번 Hello World 문제 해결 ===" << std::endl;
174+
std::cout << "Hello World!" << std::endl;
175+
std::cout << "================================" << std::endl;
176+
}
177+
```
140178

141-
## 📝 사용법
179+
### 프로그램 실행
142180

143-
1. **새로운 문제 추가**: `src/solved.h``src/solved.cc`를 수정하여 새로운 문제 해결 함수를 추가
144-
2. **문제 해결 로직**: `src/main.cc`에서 문제 번호 입력 처리 로직 구현
145-
3. **문서화**: 각 문제별 풀이 방법과 알고리즘 설명 주석 추가
181+
1. **빌드**: `mkdir build && cd build && cmake .. && make`
182+
2. **실행**: `./src/solved-ac`
183+
3. **문제 번호 입력**: 원하는 문제 번호를 입력하면 해당 문제가 실행됩니다
146184

147185
---
148186

src/CMakeLists.txt

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,40 @@
11
# 소스 파일들
22
set(SOURCES
33
main.cc
4-
solved.cc
4+
problem_manager.cc
5+
problems/problem_1000.cc
6+
problems/problem_1001.cc
7+
problems/problem_2438.cc
8+
problems/problem_2439.cc
9+
problems/problem_2440.cc
10+
problems/problem_2441.cc
11+
problems/problem_2442.cc
12+
problems/problem_2443.cc
13+
problems/problem_2739.cc
14+
problems/problem_2741.cc
15+
problems/problem_2742.cc
16+
problems/problem_8393.cc
17+
problems/problem_10950.cc
18+
problems/problem_10952.cc
519
)
620

721
# 헤더 파일들
822
set(HEADERS
9-
solved.h
23+
problem_manager.h
24+
problems/problem_1000.h
25+
problems/problem_1001.h
26+
problems/problem_2438.h
27+
problems/problem_2439.h
28+
problems/problem_2440.h
29+
problems/problem_2441.h
30+
problems/problem_2442.h
31+
problems/problem_2443.h
32+
problems/problem_2739.h
33+
problems/problem_2741.h
34+
problems/problem_2742.h
35+
problems/problem_8393.h
36+
problems/problem_10950.h
37+
problems/problem_10952.h
1038
)
1139

1240
# 실행 파일 생성

src/main.cc

Lines changed: 4 additions & 174 deletions
Original file line numberDiff line numberDiff line change
@@ -1,177 +1,7 @@
1-
#include "solved.h"
2-
3-
#include <iostream>
4-
#include <string>
1+
#include "problem_manager.h"
52

63
int main() {
7-
std::cout << "=== Solved.ac 문제 해결 프로젝트 ===" << std::endl;
8-
std::cout << "문제 번호를 입력하세요 : ";
9-
10-
std::string problem_number;
11-
std::getline(std::cin, problem_number);
12-
13-
if (!problem_number.empty()) {
14-
int problem_num = std::stoi(problem_number);
15-
std::cout << "문제 " << problem_num << "을(를) 해결하겠습니다."
16-
<< std::endl;
17-
18-
switch (problem_num) {
19-
case 1000: {
20-
int a, b;
21-
22-
std::cout << "두 정수 A와 B를 입력하세요 (예: 1, 2) : ";
23-
std::cin >> a >> b;
24-
25-
solved_ac::a_add_b(a, b);
26-
27-
break;
28-
}
29-
30-
case 1001: {
31-
int a, b;
32-
33-
std::cout << "두 정수 A와 B를 입력하세요 (예: 3 2) : ";
34-
std::cin >> a >> b;
35-
36-
solved_ac::a_sub_b(a, b);
37-
38-
break;
39-
}
40-
41-
case 2438: {
42-
int n;
43-
44-
std::cout << "N을 입력하세요 : ";
45-
std::cin >> n;
46-
47-
solved_ac::print_stars_1(n);
48-
49-
break;
50-
}
51-
52-
case 2439: {
53-
int n;
54-
55-
std::cout << "N을 입력하세요 : ";
56-
std::cin >> n;
57-
58-
solved_ac::print_stars_2(n);
59-
60-
break;
61-
}
62-
63-
case 2440: {
64-
int n;
65-
66-
std::cout << "N을 입력하세요 : ";
67-
std::cin >> n;
68-
69-
solved_ac::print_stars_3(n);
70-
71-
break;
72-
}
73-
74-
case 2441: {
75-
int n;
76-
77-
std::cout << "N을 입력하세요 : ";
78-
std::cin >> n;
79-
80-
solved_ac::print_stars_4(n);
81-
82-
break;
83-
}
84-
85-
case 2442: {
86-
int n;
87-
88-
std::cout << "N을 입력하세요 : ";
89-
std::cin >> n;
90-
91-
solved_ac::print_stars_5(n);
92-
93-
break;
94-
}
95-
96-
case 2443: {
97-
int n;
98-
99-
std::cout << "N을 입력하세요 : ";
100-
std::cin >> n;
101-
102-
solved_ac::print_stars_6(n);
103-
104-
break;
105-
}
106-
107-
case 2739: {
108-
int n;
109-
110-
std::cout << "N을 입력하세요 : ";
111-
std::cin >> n;
112-
113-
solved_ac::print_n_dan(n);
114-
115-
break;
116-
}
117-
118-
case 2741: {
119-
int n;
120-
121-
std::cout << "N을 입력하세요 : ";
122-
std::cin >> n;
123-
124-
solved_ac::n_printing(n);
125-
126-
break;
127-
}
128-
129-
case 2742: {
130-
int n;
131-
132-
std::cout << "N을 입력하세요 : ";
133-
std::cin >> n;
134-
135-
solved_ac::reverse_n_printing(n);
136-
137-
break;
138-
}
139-
140-
case 8393: {
141-
int n;
142-
143-
std::cout << "N을 입력하세요 : ";
144-
std::cin >> n;
145-
146-
solved_ac::sum_from_one_to_n(n);
147-
148-
break;
149-
}
150-
151-
case 10950: {
152-
int t;
153-
154-
std::cout << "T를 입력하세요 : ";
155-
std::cin >> t;
156-
157-
solved_ac::a_add_b_3(t);
158-
159-
break;
160-
}
161-
162-
case 10952: {
163-
solved_ac::a_add_b_5();
164-
165-
break;
166-
}
167-
168-
default:
169-
solved_ac::show_welcome_message();
170-
break;
171-
}
172-
} else {
173-
std::cout << "문제 번호가 입력되지 않았습니다." << std::endl;
174-
}
175-
176-
return 0;
4+
ProblemManager manager;
5+
manager.run();
6+
return 0;
1777
}

0 commit comments

Comments
 (0)