-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add 'baekjoon/' from commit '043a96f04660872e70c324555cd8285f40e78477'
- Loading branch information
Showing
225 changed files
with
8,295 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
BasedOnStyle: Google | ||
ColumnLimit: 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
root = true | ||
|
||
[*] | ||
charset = utf-8 | ||
end_of_line = lf | ||
insert_final_newline = true | ||
indent_style = space | ||
indent_size = 2 | ||
trim_trailing_whitespace = true | ||
|
||
[*.{cpp, c, h}] | ||
max_line_length = 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
name: SyntaxCheck | ||
|
||
on: | ||
push: | ||
branches: [main] | ||
paths: # SyntaxCheck runs only when .c .cpp .h files are changed. | ||
- "**.c" | ||
- "**.cpp" | ||
- "**.h" | ||
|
||
pull_request: | ||
branches: [main] | ||
paths: # SyntaxCheck runs only when .c .cpp .h files are changed. | ||
- "**.c" | ||
- "**.cpp" | ||
- "**.h" | ||
|
||
jobs: | ||
SyntaxCheck: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout repository | ||
uses: actions/checkout@v4 | ||
|
||
- name: Install clang-format | ||
run: sudo apt-get install -y clang-format | ||
|
||
- name: Check clang-format | ||
run: clang-format -n -Werror $(find . -regex '.*\.\(c\|cpp\|h\)') | ||
# Use 'clang-format -h' on linux for help manuals. | ||
# '-Werror' option turns warnings into errors. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
# Ignore output(.exe) files | ||
Src/**/Output |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
{ | ||
// Editor: VScode | ||
"editor.formatOnPaste": true, | ||
"editor.formatOnType": true, | ||
"editor.formatOnSave": true, | ||
// Extension: C/C++ Extension Pack (clang-format) | ||
"C_Cpp.clang_format_fallbackStyle": "Google", | ||
"C_Cpp.errorSquiggles": "disabled" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
# 1. Introduction | ||
|
||
- 백준(Baekjoon), 프로그래머스(Programmers) 등 Problem Solving(이하 PS)을 하며 생성된 소스 코드들을 효율적으로 관리하기 위해 고안된 프레임워크입니다. | ||
- C/C++ 언어 사용자들을 대상으로 합니다. | ||
|
||
## 1-1. Reasons for selecting VScode | ||
|
||
### 1-1-1. PS만을 위한 가벼운 에디터(Editor)의 필요성. | ||
|
||
- C 계열 언어의 개발이 주로 이루어지는 Visual Studio는 통합 IDE로써 프로그램이 무겁고 복잡합니다. 이를 단순 PS만을 위해 사용하기에는 부담이 따릅니다. | ||
|
||
### 1-1-2. 라이브러리(Library)를 제외한 의존성 관계의 불필요성. | ||
|
||
- 일반적인 개발의 경우, 다양한 파일 및 소스코드들의 의존성 관계를 관리하며 빌드(Build)를 진행합니다. 이를 C 계열 언어에서 효율적으로 수행하기 위해서는 Visual Studio가 최적이라 할 수 있습니다. | ||
- 하지만, PS의 경우, 각각의 소스코드들이 독립적입니다. 각각의 소스코드 내부에서 사용되는 라이브러리(Library)들에는 의존적일 수 있지만, 이외의 파일에는 의존적이지 않습니다. | ||
- 예를 들어, Visual Studio에서 C/C++ 프로젝트를 시작하게 되면, 외부종속성 및 리소스 등을 관리하기 위한 수많은 부가 파일들이 생성됩니다. 이는 단순 PS만을 위한 환경으로는 과합니다. | ||
|
||
## 1-2. Shortcomings of VScode | ||
|
||
### 1-2-1. 컴파일러의 부재 및 다소 복잡한 설치 과정. | ||
|
||
- Visual Studio와는 달리, VScode에는 C/C++ Compiler가 내장되어 있지 않습니다. Extension을 통한 확장 설치도 불가능합니다. 따라서, 운영체제에 따라 컴파일러를 개별 설치해 주거나 기존에 설치되어 있는 컴파일러를 이용해야 합니다. | ||
- 하지만, 이 과정이 다소 복잡합니다. 일반적인 방법으로 VScode에서 컴파일러를 사용하기 위해서는 tasks.json 파일을 수정하여 컴파일 및 빌드 관련 내용들을 설정해야 합니다. 생각보다 복잡한 과정에 어려움을 겪는 사람들이 많습니다. | ||
- 따라서, 'C/C++ Compile Run'이라는 VScode Extension을 통해 일관된 방식으로 컴파일러를 설치 및 실행할 수 있게 하였습니다. 이는 기존 방식보다 쉽고 편리합니다. | ||
|
||
### 1-2-2. 일관된 Convention(Linter or Formatter)의 필요성. | ||
|
||
- Visual Studio의 경우 IDE에서 자동으로 Convention을 맞춰줍니다. 하지만, VScode는 단순 에디터이기 때문에 아무런 기능이 없습니다. 'C/C++ Extension Pack'이라는 VScode Extension을 설치하면 자동적으로 'clang-format'이라는 Formatter가 함께 설치됩니다. 이는 C/C++ 언어를 위한 Linter 혹은 Formatter라 할 수 있습니다. 'clang-format'을 통해 일관된 Convention을 유지할 수 있게 하였습니다. | ||
- 또한, 'editorconfig'를 통해 보다 전역적인 Convention을 유지할 수 있게 하였습니다. | ||
|
||
### 1-2-3. CI/CD 과정의 필요성. | ||
|
||
- 문법 및 Convention 오류가 있는 소스코드가 업로드된다면 문제가 될 수 있습니다. 이를 Github Workflows를 통해 자동으로 관리합니다. c, cpp, h 확장자를 가진 파일을 수정 및 추가한 후 Push 및 Pull_Request를 진행할 경우, 자동으로 문법 및 Convention을 검사한 후 CI/CD 과정을 수행합니다. | ||
|
||
### 1-2-4. IDE와 유사한 환경 구성의 필요성. | ||
|
||
- 결국, Visual Studio의 장점과 VScode의 장점을 합치기 위해 현재 프레임워크를 설계하였습니다. Visual Studio처럼 편리하면서 가볍고 확장 가능한 VScode 개발환경을 만드는 것이 목표입니다. | ||
|
||
# 2. How to install | ||
|
||
## 2-1. Prerequisite | ||
|
||
### 2-1-1. Git | ||
|
||
- Git을 설치해야 합니다. | ||
|
||
### 2-1-2. VScode | ||
|
||
- VScode를 설치해야 합니다. | ||
|
||
### 2-1-3. VScode Extension & C/C++ Compiler | ||
|
||
- 아래 Extesion 및 Compiler를 VScode 상에 모두 설치합니다. | ||
|
||
1. C/C++ Extension Pack | ||
|
||
2. C/C++ Compile Run & TDM-GCC(Compiler) | ||
|
||
> 'C/C++ Compile Run' Extension을 설치한 후, 해당 Extension의 Manual에 따라 TDM-GCC를 설치합니다. | ||
> | ||
> C Compiler의 기본 경로 | ||
> | ||
> - /usr/bin/gcc (Linux) | ||
> - C:\TDM-GCC-64\bin\gcc.exe (Windows) | ||
> | ||
> C++ Compiler의 기본 경로 | ||
> | ||
> - /usr/bin/g++ (Linux) | ||
> - C:\TDM-GCC-64\bin\gcc.exe (Windows) | ||
3. EditorConfig for VS Code | ||
|
||
## 2-2. git clone | ||
|
||
Git Bash 상에 아래 명령어를 입력합니다. | ||
|
||
```bash | ||
git clone https://github.com/lumirlumir/PS_Framework.git | ||
``` | ||
|
||
# 3. File Structures | ||
|
||
```bash | ||
📦PS_Framework | ||
┣ 📂.github | ||
┃ ┗ 📂workflows | ||
┃ ┗ 📜SyntaxCheck.yaml # Git: Github Workflows 설정 파일. | ||
┣ 📂.vscode | ||
┃ ┗ 📜settings.json # VScode: Editor 설정 파일. | ||
┣ 📂Src | ||
┃ ┗ 📂* (Baekjoon, Programmers or Etc.) | ||
┃ ┣ 📂Blogged # 블로그에 게시된 문제 저장. | ||
┃ ┣ 📂Solved # 다 푼 문제 저장. | ||
┃ ┗ 📂Unsolved # 아직 풀고있는 문제 저장. | ||
┣ 📜.clang-format # C/C++: Convention 설정 파일. | ||
┣ 📜.editorconfig # EditorConfig: Covention 설정 파일. | ||
┣ 📜.gitignore # Git: Gitignore 설정 파일. | ||
┣ 📜README.md # Git: README 파일. | ||
┗ 📜VScode.code-workspace # VScode: Workspace 설정 파일. | ||
``` | ||
|
||
# 4. Others | ||
|
||
## 4-1. Blog에 Repository상의 소스코드를 삽입하는 방법. | ||
|
||
- [Emgithub](https://emgithub.com/) | ||
|
||
# 5. Release Note | ||
|
||
- v0.0.1: 2024.02.20 |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
#include <stdio.h> | ||
|
||
int main(void) { | ||
int A, B; | ||
scanf("%d %d", &A, &B); | ||
printf("%d", A + B); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#include <stdio.h> | ||
|
||
int main(void) { | ||
int A, B, result = 0; | ||
|
||
scanf("%d %d", &A, &B); | ||
|
||
printf("%d", A - B); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
#pragma warning(disable : 4996) // visual studio scanf 오류 방지. | ||
#include <math.h> //수학함수 사용 목적. | ||
#include <stdio.h> | ||
#include <stdlib.h> //abs() 함수 사용 목적. | ||
|
||
typedef struct { | ||
int x; // x좌표 | ||
int y; // y좌표 | ||
int r; // 반지름 | ||
} Circle; | ||
|
||
double center_distance(Circle c1, Circle c2) { | ||
return sqrt(pow(c1.x - c2.x, 2) + pow(c1.y - c2.y, 2)); | ||
} | ||
|
||
int positional_relationship(Circle c1, Circle c2) { | ||
double d = center_distance(c1, c2); // 자료형이 double임에 주의. | ||
|
||
/* 1. 두 원이 일치할 때 */ | ||
if (c1.x == c2.x && c1.y == c2.y && c1.r == c2.r) { | ||
return -1; | ||
} | ||
/* 2. 두 원이 일치하지 않을 때 */ | ||
else { | ||
/* 2-1. 외부 = 접점 0개 */ | ||
if (c1.r + c2.r < d) | ||
return 0; | ||
/* 2-2. 외접 = 접점 1개 */ | ||
else if (c1.r + c2.r == d) | ||
return 1; | ||
/* 2-3. 두점에서 만남 = 접점 2개 */ | ||
else if (abs(c1.r - c2.r) < d && d < c1.r + c2.r) | ||
return 2; | ||
/* 2-4. 내접 = 접점 1개 */ | ||
else if (abs(c1.r - c2.r) == d) | ||
return 1; | ||
/* 2-5. 내부 = 접점 0개 */ | ||
else if (d < abs(c1.r - c2.r)) | ||
return 0; | ||
/* 2-6. 동심원 = 접점 0개 */ | ||
else if (d == 0) | ||
return 0; | ||
} | ||
} | ||
|
||
int main(int argc, char* argv[]) { | ||
int T; | ||
Circle c1, c2; | ||
|
||
scanf("%d", &T); | ||
for (int i = 0; i < T; i++) { | ||
scanf("%d %d %d %d %d %d", &c1.x, &c1.y, &c1.r, &c2.x, &c2.y, &c2.r); | ||
|
||
printf("%d\n", positional_relationship(c1, c2)); | ||
} | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
#pragma warning(disable : 4996) | ||
#include <stdio.h> | ||
|
||
typedef struct { | ||
int num0_cache; | ||
int num1_cache; | ||
} Cache; | ||
|
||
Cache C[41] = {{1, 0}, {0, 1}, {}}; | ||
// Cache(Memoization), C[0] C[1] 제외 멤버변수 모두 0으로 초기화. | ||
|
||
void fibonacci(void) { | ||
for (int i = 2; i <= 40; i++) { // 40보다 작거나 같은 자연수 | ||
C[i].num0_cache = C[i - 1].num0_cache + C[i - 2].num0_cache; | ||
C[i].num1_cache = C[i - 1].num1_cache + C[i - 2].num1_cache; | ||
} | ||
} | ||
|
||
int main(int argc, char* argv[]) { | ||
fibonacci(); | ||
|
||
int T; | ||
scanf("%d", &T); | ||
for (int i = 0; i < T; i++) { | ||
int N; | ||
scanf("%d", &N); | ||
printf("%d %d\n", C[N].num0_cache, C[N].num1_cache); | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
/* | ||
문제 상황에 따라 TD방식과 BU방식 중에서 어떤걸로 문제를 풀지 | ||
결정할 줄 알아야 한다. | ||
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
#include <cstdio> | ||
#include <iostream> | ||
using namespace std; | ||
|
||
int main(void) { | ||
int A, B; | ||
cin >> A >> B; | ||
|
||
printf("%0.10lf", ((double)A / (double)B)); | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
#pragma warning(disable : 4996) // visual studio scanf 오류 방지. | ||
#include <stdio.h> | ||
|
||
int table[10][4]; | ||
|
||
int power(int a, int b) { | ||
if (b == 0) | ||
return 1; | ||
else | ||
return power(a, b - 1) * a; | ||
} | ||
|
||
void make_table(void) { | ||
for (int i = 0; i < 10; i++) | ||
for (int j = 1; j <= 4; j++) | ||
table[i][j % 4] = (int)power(i, j) % 10; | ||
/* | ||
math.h의 pow()를 이용하여, | ||
table[i][j % 4] = (int)pow(i, j) % 10; | ||
으로 구현해도 된다. | ||
(math.h 함수는 반환형이 double이므로, int로 형변환 해준다.) | ||
*/ | ||
} | ||
|
||
int main(int argc, char* argv[]) { | ||
/* 변수선언 */ | ||
int a, b, T; | ||
|
||
/* 테이블 만들기 */ | ||
make_table(); | ||
|
||
/* 입력값 받은 후 연산 */ | ||
scanf("%d", &T); | ||
for (int i = 0; i < T; i++) { | ||
scanf("%d %d", &a, &b); | ||
printf("%d\n", table[a % 10][b % 4] == 0 ? 10 : table[a % 10][b % 4]); | ||
} | ||
|
||
return 0; | ||
} |
Oops, something went wrong.