Skip to content

Commit b7bcc23

Browse files
committed
tools - algo - basics : done
1 parent 91971cf commit b7bcc23

28 files changed

+475
-9
lines changed
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading

docs/works/tools-and-tales/data-structures-and-algorithms/basics/topic/boj_solved.md

+44-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,49 @@ title: "boj + solved 소개"
44

55
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }
66

7-
!!! danger "UNDER CONSTRUCTION"
8-
This page is under construction.
7+
boj는 [백준 온라인 저지(Baekjoon Online Judge)](https://www.acmicpc.net/){:target="\_blank"}를 약자만 따서 부른 것으로, 사이트 가입 후 사이트에 있는 프로그래밍 문제를 풀고 코드를 제출해서 채점받을 수 있다.
8+
9+
solved는 [솔브드(solved.ac)](https://solved.ac/){:target="\_blank"}를 이야기하며, boj에 있는 문제들을 boj 사용자들이 난이도를 매겨놓은 곳이다. boj 계정으로 가입하여 사용할 수 있다.
10+
11+
## boj
12+
13+
1. 메인 화면에서 '문제' -> '전체 문제' 카테고리로 이동한다.
14+
![boj-0](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/boj/boj-0.png)
15+
16+
2. 문제 목록을 볼 수 있다. 번호와 문제의 난이도는 무관하므로 쉬운 문제를 찾는 것은 이후 solved를 활용하기로 하자. 첫 번째 문제를 풀어보겠다.
17+
![boj-1](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/boj/boj-1.png)
18+
19+
3. 문제를 확인할 수 있다. 여기서 문제 내용과 어떤 포맷으로 입력이 주어지며 어떤 포맷으로 출력을 해야 하는지 확인하고, 본인의 개발 환경에서 문제를 풀어보자. 문제를 풀고 나면 캡쳐에 표시된 '제출' 탭으로 넘어가면 된다.
20+
![boj-2](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/boj/boj-2.png)
21+
22+
4. 제출할 언어를 먼저 선택한 뒤에 제출할 코드를 넣고 '제출' 버튼을 누른다.
23+
![boj-3](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/boj/boj-3.png)
24+
25+
5. 오작동 하는 코드를 넣으면 이와 같이 결과에 에러라고 표시해주거나, '틀렸습니다'라고 표시해준다.
26+
![boj-4](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/boj/boj-4.png)
27+
28+
6. 다시 제출하자.
29+
![boj-5](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/boj/boj-5.png)
30+
31+
7. 다행히도 이번에는 맞았다. 결과에 '맞았습니다' 표시를 확인할 수 있다.
32+
![boj-6](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/boj/boj-6.png)
33+
34+
## solved
35+
36+
1. 메인 화면이다. 처음 문제를 푸는 사람들은 캡쳐에 표시한 '새싹 문제'부터 풀어보는 것이 좋다.
37+
![solved-0](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/solved/solved-0.png)
38+
39+
2. 새싹 문제도 여러 탭으로 분리가 되어있으니 각 탭에 있는 문제를 풀어보자. 문제를 누르면 boj의 문제 페이지로 넘어간다. 다른 문제를 확인하기 위해 '문제' 탭을 클릭해보자.
40+
![solved-1](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/solved/solved-1.png)
41+
42+
3. 문제 탭에 들어가면 수 만 개의 문제들이 난이도 별로 분류가 되어있다. unrated는 난이도가 아직 판정되지 않은(보통 어려운) 문제들이니 제외하면, 위에서부터 난이도가 쉬운 순서대로 분류되어있다.
43+
![solved-2](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/solved/solved-2.png)
44+
45+
4. 브론즈 5 탭을 누르면 아래와 같은 문제들이 있다. 같은 난이도로 묶여있어도 푼 사람 수가 많은 문제일수록 쉬울 가능성이 높다. 문제를 클릭하면 boj의 문제 페이지로 넘어간다.
46+
![solved-3](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/solved/solved-3.png)
47+
48+
###
49+
50+
- 입력, 출력만 보면 쉬워보이는 문제더라도 다시 조건을 확인하면 엄청난 양의 인풋이 주어진다거나 해서 푸는 것이 어려울 수도 있다. 앞서 설명하지는 않았지만 '시간 초과', 혹은 '메모리 초과'같은 결과가 나왔으면 단순히 눈에 보이는 방식으로는 문제를 풀 수 없다는 이야기일 수 있으니, 다른 사람들이 어떻게 풀었는지 검색해서 구현 방법을 찾아보면서 테크닉들을 익히는 것을 추천한다.
951

1052
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }

docs/works/tools-and-tales/data-structures-and-algorithms/basics/topic/dev_environment.md

+70-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,75 @@ title: "개발 환경 세팅"
44

55
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }
66

7-
!!! danger "UNDER CONSTRUCTION"
8-
This page is under construction.
7+
기초 문법을 한 번 훑어보았다면, 이제 실습을 진행해보자.
8+
9+
## 온라인
10+
11+
매번 정해진 pc에서 개발할 수 있는 것이 아니고, 사용하는 pc에 개발 환경이 세팅되어 있지 않다면, 개발을 할 때마다 매번 환경을 새로 세팅해주는 것보다 작성한 코드를 돌려주는 온라인 서비스들을 활용하는 것이 더 편할 수도 있다. online python, online c++, ... 등의 키워드로 구글링해보면 무료로 코드 실행이 가능한 사이트들을 찾을 수 있을 것이다.
12+
13+
개인적으로는 아주 간단한 코드가 돌아가는지 확인해야 하는 상황에서는 [onlinegdb](https://www.onlinegdb.com/){:target="\_blank"}사이트에 들어가서 테스트를 해보기도 한다. 이 글을 작성하고 있는 2025년 2월 시점에 무료로 사용이 가능하고, python, js, c#, c++등 여러 주요 언어들을 지원해준다.
14+
15+
아래에서는 python 코드를 작성하고 돌려보는 것을 보여주도록 하겠다.
16+
17+
![onlinegdb-0](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/onlinegdb/onlinegdb-0.png)
18+
![onlinegdb-1](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/onlinegdb/onlinegdb-1.png)
19+
![onlinegdb-2](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/onlinegdb/onlinegdb-2.png)
20+
21+
## 언어 설치 및 통합 개발 환경 설치
22+
23+
### 언어 설치
24+
25+
로컬 환경에서 코드를 작성하고 실행하기 위해서는 먼저 언어를 설치해야 한다. 이에 대한 내용은 검색을 통해 간단하게 찾을 수 있으므로, 자세한 내용은 생략하도록 하겠다.
26+
27+
- python은 python 검색 후 공식 홈페이지에서 최신 버전을 다운받으면 된다.
28+
- javascript는 node를 검색하여 설치하도록 하자.
29+
- C# 및 C++은 이후 단계에서 설치할 수 있으니 일단 넘어가자.
30+
31+
### 통합 개발 환경 설치
32+
33+
언어를 설치했으면 이 언어를 사용해서 코드를 짜고 실행해볼 수 있는 환경을 갖춰야 한다. 이때 통합 개발 환경, 혹은, IDE(Integrated Development Environment)를 설치해서 사용하면 된다. 이에 대한 내용도 검색을 통해 찾아보도록 하자.
34+
35+
- python, javascript로 개발을 한다면 Visual Studio Code를 설치하자.
36+
- C#, C++로 개발을 한다면 Visual Studio Community를 설치하자.
37+
- 설치 과정 중 C# 유저는 '.NET', C++ 유저는 'C++를 사용한 데스크톱 개발' 항목을 체크하여 같이 설치하면 된다.
38+
되는데, 처음에는 언어에 따라 Visual Studio Code나 Visual Studio Community로 시작하는 것이 무난하다.
39+
40+
개발 환경 세팅이 완료되었으면 코드를 작성하고 실행해보도록 하자.
41+
42+
=== "python, javascript"
43+
44+
파이썬과 자바스크립트는 비슷한 방식으로 개발을 할 수 있다.
45+
46+
1. 먼저 vscode를 실행한다. 여기에서는 welcome 창을 닫아서 화면이 비어있는데, 처음 실행했을 때는 다른 정보들이 같이 보일 수 있다.
47+
![vscode-hello-0](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/vscode-hello/vscode-0.png)
48+
49+
2. 작성한 코드를 저장할 폴더를 하나 만든 뒤, vscode에 드래그 앤 드롭을 한다. 여기에서는 'helloworld'라는 폴더를 만들었다.
50+
![vscode-hello-1](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/vscode-hello/vscode-1.png)
51+
52+
3. 이미지에 표시된 버튼을 누른 뒤
53+
- 파이썬 유저는 'test.py'라는 파일을 만들자.
54+
- 자바스크립트 유저는 'test.js'라는 파일을 만들자.
55+
![vscode-hello-2](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/vscode-hello/vscode-2.png)
56+
57+
4. 생성한 파일에 다음과 같이 코드를 작성한다.
58+
``` python
59+
# test.py
60+
print('hello')
61+
```
62+
혹은
63+
``` js
64+
// test.js
65+
console.log('hello')
66+
```
67+
![vscode-hello-3](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/vscode-hello/vscode-3.png)
68+
69+
5. 이제 작성한 코드를 실행해보자. 먼저 ``ctrl + ` ``키를 누르면 창 하단에 터미널 창이 뜰 것이다(`` ` ``기호는 백틱이라고 읽으며, 숫자 1 옆에 있다.). 이 창에 `py test.py`, 혹은 `node test.js`라고 입력하고 엔터를 누르면 작성한 코드가 실행된다. 실행하고 나면 터미널 창에 `hello`라는 문자열이 출력된다.
70+
![vscode-hello-4](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/vscode-hello/vscode-4.png)
71+
72+
=== "C#, C++"
73+
74+
``` cs
75+
// WIP
76+
```
977

1078
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }

docs/works/tools-and-tales/data-structures-and-algorithms/basics/topic/input_output.md

+198-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,203 @@ title: "입출력"
44

55
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }
66

7-
!!! danger "UNDER CONSTRUCTION"
8-
This page is under construction.
7+
실습을 원활하게 진행하기 위해서는 중간중간 출력을 해보기도 하고, 코드에 있는 변수를 수정하지 않고 외부의 입력을 받아서 써야 할때도 있다. 여기에서는 아주 간단한 입출력 방법을 설명하겠다.
8+
9+
## 출력
10+
11+
코드를 작성한 뒤 실행하면 코드가 돈다. 이때 코드 사이에 어떤 값을 출력하도록 하는 것이 가능하다. 지금은 출력한 결과물이 콘솔 창에 나타난다고만 이해하고 넘어가도 괜찮다. 출력은 다음의 상황에 매우 유용하다.
12+
13+
- 연산을 한 뒤 특정 변수에 어떤 값이 들어있는지 확인
14+
- 조건문에서 어떤 분기를 타고 갔는지 확인
15+
- 반복문 내부에서 일어난 일 확인
16+
17+
=== "python"
18+
19+
``` python
20+
"""변수를 다음과 같이 확인할 수 있다.
21+
"""
22+
a, b = 1, 2
23+
c = a + b
24+
print(c) # 3
25+
26+
"""문자열 사이에 변수값을 같이 출력하고 싶을 수 있다.
27+
파이썬에서는 fstring이라는 것을 사용할 수 있다. 문자열 앞에 `f`를 붙이고, 출력
28+
하고 싶은 변수를 중괄호 안에 묶어서 쓴다.
29+
"""
30+
print(f"a is {a} and b is {b}, so a + b equals {c}.")
31+
32+
"""조건문을 다음과 같이 확인할 수 있다.
33+
"""
34+
x, y = 24, 42
35+
if x > y:
36+
print('x is larger than y')
37+
else:
38+
print('x is not larger than y')
39+
40+
"""반복문에 print를 넣어두면 반복문 내에서 일어나는 일을 쉽게 확인할 수 있다.
41+
"""
42+
43+
s = 0
44+
for i in range(10):
45+
s += i
46+
print(i, s) # 공백으로 구분된 두 변수가 출력된다.
47+
48+
# 출력 결과:
49+
# 0 0
50+
# 1 1
51+
# 3 2
52+
# 6 3
53+
# 10 4
54+
# 15 5
55+
# 21 6
56+
# 28 7
57+
# 36 8
58+
# 45 9
59+
```
60+
61+
=== "javascript"
62+
63+
``` js
64+
// WIP
65+
```
66+
67+
=== "C#"
68+
69+
``` cs
70+
// WIP
71+
```
72+
73+
=== "C++"
74+
75+
``` cpp
76+
// WIP
77+
```
78+
79+
## 입력
80+
81+
많은 경우 출력까지만 할 줄 알아도 괜찮다. 하지만 콘솔 창을 통해 입력을 받거나 텍스트 파일을 불러와서 입력으로 사용하는 경우가 종종(...이라고 썼지만, 아마 알고리즘 문제를 푸는 경우 외에 볼 일이 많지는 않을 것이다.) 있으니니, 이를 위해 기본적인 입력 함수 사용법을 설명하도록 하겠다.
82+
83+
=== "python"
84+
85+
``` python
86+
"""다음과 같이 직접 입력을 받을 수 있다.
87+
"""
88+
# 터미널 창에 문자열이 먼저 나오고, 이어서 사용자가 값을 입력한 뒤 엔터를 누른다.
89+
a = input("첫 번째 수를 입력하세요: ")
90+
b = input("두 번째 수를 입력하세요: ")
91+
print(f'두 수의 합은 {a + b}입니다.') # fstring의 중괄호 안에서 연산을 할 수도 있다.
92+
93+
# 출력 예시:
94+
# 첫 번째 수를 입력하세요: 1
95+
# 두 번째 수를 입력하세요: 3
96+
# 두 수의 합은 13입니다.
97+
98+
"""출력 예시가 뭔가 이상하다. 1 + 3 = 4가 되어야 하는데, 13이 되었다.
99+
그 이유는, input함수를 통해 받아온 값은 문자열이기 때문이다. 참고로 input함수는 줄바꿈
100+
(엔터를 치면 줄바꿈 문자가 입력된다)이 나오기 전까지의 값을 한 번에 문자열로 받아온다.
101+
우리는 숫자로 계산을 하고 싶다. 그러므로 문자열로 들어온 값을 정수로 변환해주어야 한다.
102+
"""
103+
104+
a = int(input("첫 번째 수를 입력하세요: "))
105+
b = int(input("두 번째 수를 입력하세요: "))
106+
print(f'두 수의 합은 {a + b}입니다.')
107+
108+
# 출력 예시:
109+
# 첫 번째 수를 입력하세요: 1
110+
# 두 번째 수를 입력하세요: 3
111+
# 두 수의 합은 4입니다.
112+
113+
"""터미널 창에 직접 값을 입력하는 것이 번거로울 수 있다. 미리 입력할 값을 텍스트 파일로
114+
저장해둔 뒤 이를 코드를 실행할때 입력으로 사용하는 것도 가능하다.
115+
116+
실습을 위해 파이썬 파일이 있는 폴더에 다음과 같은 텍스트 파일을 준비한다.
117+
118+
(data.txt)
119+
1
120+
3
121+
"""
122+
123+
# 아래는 바로 위에서 사용한 것과 같은 코드다.
124+
a = int(input("첫 번째 수를 입력하세요: "))
125+
b = int(input("두 번째 수를 입력하세요: "))
126+
print(f'두 수의 합은 {a + b}입니다.')
127+
128+
# 지금까지 터미널에서 `py test.py`로 코드를 작동시켰다면,
129+
# 이번에는 `py test.py < test.txt`로 코드를 작동시켜보자.
130+
# 만약 어떤 에러가 발생했다고 나오면 다음 항목에서 해결 방법을 알아보고 다시 돌아오자.
131+
132+
# 출력 예시:
133+
# 첫 번째 수를 입력하세요: 두 번째 수를 입력하세요: 두 수의 합은 4입니다.
134+
135+
# 텍스트 파일에 있는 내용을 읽어서 입력으로 사용하기 때문에 사용자가 직접 값을 입력하거나
136+
# 엔터를 누르지 않는다. 그래서 input 함수 안에 있는 문자열이 한 줄로 출력된다.
137+
# 이를 방지하기 위해서 다음과 같이 코드를 수정하자.
138+
a = int(input())
139+
b = int(input())
140+
print(f'두 수의 합은 {a + b}입니다.')
141+
142+
# 출력 예시:
143+
# 두 수의 합은 4입니다.
144+
145+
"""종종 한 줄에 공백으로 구분된 숫자가 여럿 들어있을 수도 있다.
146+
이번에는 실습을 위해 파이썬 파일이 있는 폴더에 다음과 같은 텍스트 파일을 준비한다.
147+
148+
(data-2.txt)
149+
1 3
150+
"""
151+
# 다음의 두 함수에 대해 알아야 한다.
152+
# - split 함수는 문자열을 특정 문자를 기준으로 잘라준다.
153+
# - map 함수는 리스트 안에 있는 값들에 특정한 함수를 적용해준다.
154+
# 이렇다는 개념만 숙지하고 다음의 코드를 보자.
155+
156+
a, b = map(int, input().split())
157+
158+
# 1. 여기서 split 함수 안에 아무 값도 넣지 않았는데, 그럴 경우 공백을 기준으로 문자를
159+
# 잘라준다. 즉, 아래와 같은 일이 일어난다.
160+
# '1 3'.split() -> ['1', '3']
161+
162+
# 2. map함수를 써서 각 값에 int함수를 적용했다. 이는 아래와 같이 작동한다.
163+
# map(int, ['1', '3']) -> [int('1'), int('3')] -> [1, 3]
164+
165+
# 3. a, b에 리스트 안에 있는 값을 펼쳐서 넣어준다.
166+
# a, b = [1, 3] -> a = 1이 되고, b = 3이 된다.
167+
168+
# 두 값을 더한 값은 다음과 같이 출력한다.
169+
print(f'두 수의 합은 {a + b}입니다.')
170+
171+
# 출력 예시:
172+
# 두 수의 합은 4입니다.
173+
```
174+
175+
=== "javascript"
176+
177+
``` js
178+
// WIP
179+
```
180+
181+
=== "C#"
182+
183+
``` cs
184+
// WIP
185+
```
186+
187+
=== "C++"
188+
189+
``` cpp
190+
// WIP
191+
```
192+
193+
### 에러: '<' 연산자는 나중에 사용하도록 예약되어 있습니다
194+
195+
만약 터미널이 powershell이라면 작동하지 않을 수 있다. 이 경우 cmd 등의 기타 프로파일을 사용하면 되는데, 방법은 아래와 같다.
196+
197+
1. 먼저 문제가 발생한 화면이다. 아래와 같은 에러 메세지가 뜬다.
198+
![profile-change-0](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/profile-change/profile-change-0.png)
199+
200+
2. 표시된 화살표 버튼을 눌러서 다른 프로파일을 확인한다. `Command Prompt`를 선택한다.
201+
![profile-change-1](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/profile-change/profile-change-1.png)
202+
203+
3. 다시 기존의 실습을 이어서 진행한다. 잘 작동하는 것을 확인할 수 있다.
204+
![profile-change-2](../../../../../assets/tools-and-tales/data-structures-and-algorithms/basics/profile-change/profile-change-2.png)
9205

10206
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }

0 commit comments

Comments
 (0)