Skip to content

Commit e74bf93

Browse files
committed
tools - algo - basics : skeleton
1 parent d567378 commit e74bf93

File tree

8 files changed

+257
-8
lines changed

8 files changed

+257
-8
lines changed

docs/works/tools-and-tales/data-structures-and-algorithms/basics/index.ko.md

+20
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,24 @@ title: "기초"
88

99
<div class="grid cards" markdown>
1010
- [__타입, 변수, 연산__](./topic/type_var_oper.md)
11+
- [__리스트, 딕셔너리__](./topic/list_dict.md)
12+
- [__조건문__](./topic/condition.md)
13+
- [__반복문__](./topic/loop.md)
14+
</div>
15+
16+
## 개발 환경
17+
18+
개발 환경을 갖추고 앞서 살펴본 기초 내용을 실습해본다.
19+
20+
<div class="grid cards" markdown>
21+
- [__개발 환경 세팅__](./topic/dev_environment.md)
22+
- [__입출력__](./topic/input_output.md)
23+
</div>
24+
25+
## 문제 풀기
26+
27+
이제 문제를 풀기 위한 준비가 끝났다. 문제를 풀어보자.
28+
29+
<div class="grid cards" markdown>
30+
- [__boj + solved 소개__](./topic/boj_solved.md)
1131
</div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
title: "boj + solved 소개"
3+
---
4+
5+
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }
6+
7+
!!! danger "UNDER CONSTRUCTION"
8+
This page is under construction.
9+
10+
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
title: "조건문"
3+
---
4+
5+
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }
6+
7+
!!! danger "UNDER CONSTRUCTION"
8+
This page is under construction.
9+
10+
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
title: "개발 환경 세팅"
3+
---
4+
5+
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }
6+
7+
!!! danger "UNDER CONSTRUCTION"
8+
This page is under construction.
9+
10+
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
title: "입출력"
3+
---
4+
5+
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }
6+
7+
!!! danger "UNDER CONSTRUCTION"
8+
This page is under construction.
9+
10+
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
---
2+
title: "리스트, 딕셔너리"
3+
---
4+
5+
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }
6+
7+
페이지 제목을 `리스트, 딕셔너리` 라고 지었지만, 이는 파이썬 용어고 실제로는 여러 값들을 담아놓을 수 있는 자료구조에 대해 다룰 것이다. 자료구조 안에 들어있는 값들은 순서(인덱스) 혹은 이름(키)을 통해 접근 가능하고, 자료구조에 새로운 값을 추가하거나 안에 들어있는 값을 제거하는 것이 가능하다.
8+
9+
이 페이지에서는 되도록이면 간단한 개념 및 사용법만 설명하고 넘어갈 것이다. 즉, 구체적인 내부 구현이나 성능에 관한 이야기는 하지 않는다.
10+
11+
## 순서를 통해 접근할 수 있는 자료구조
12+
13+
순서를 통해 접근할 수 있는 자료구조는 일반적으로 다음의 특징을 가지고 있다.
14+
15+
- [a, b, c, d] 꼴로 표기한다.
16+
- a, b, c, d는 각각 아이템이라고 한다.
17+
- 아이템들은 타입이 같을 수도, 아닐 수도 있다. 이는 언어마다 조금씩 다르므로 이후에 더 설명한다.
18+
- 안에 있는 총 아이템의 개수를 확인할 수 있다.
19+
- 위의 예시에서는 아이템이 총 4개 들어있다.
20+
- 아이템들에는 순서가 있다.
21+
- 제일 왼쪽에 있는 아이템이 가장 앞에 있는 아이템이다.
22+
- 순서(혹은, 인덱스)가 0부터 시작한다.
23+
- 즉, 첫 번째 아이템이 0번, 두 번째 아이템이 1번, ... 순서로 번호가 매겨져있다.
24+
- 특정한 인덱스에 있는 아이템에 접근할 수 있다.
25+
- 예를 들어, 리스트 안에 5개의 아이템이 있다면 인덱스 0번에 있는 아이템에 접근할 경우 맨 앞에 있는 아이템의 값을 받아올 수 있다.
26+
- 특정 인덱스에 있는 아이템을 수정하는 것도 가능하다.
27+
- 특정한 인덱스에 새로운 아이템을 더할 수 있다.
28+
- 이 경우 기존에 해당 인덱스에 있는 아이템들부터 뒤로 밀린다.
29+
- [0, 1, 2, 3, 4]에서 2번 인덱스에 새로운 아이템 9를 넣으면 [0, 1, 9, 2, 3, 4]가 된다.
30+
- 특정한 인덱스에 있는 아이템을 제거할 수 있다.
31+
- 이 경우 기존에 해당 인덱스 뒤에 있는 아이템들부터 앞으로 당겨진다.
32+
- [0, 1, 2, 3, 4]에서 2번 인덱스에 있는 아이템을 제거하면 [0, 1, 3, 4]가 된다.
33+
34+
=== "python"
35+
36+
``` python
37+
# 파이썬에는 list(리스트)를 통해 위의 자료구조가 구현되어 있다.
38+
39+
# 지금까지는 변수 이름을 알파벳 하나로 썼는데, 실제 개발할 때는 변수가 어떤 값을
40+
# 담고있는지 더 쉽게 파악하기 위해서 변수명을 더 길고 자세하게 쓴다.
41+
# 파이썬에서는 변수명을 지을때 언더바(_)로 구분된 단어들을 사용하는데, 이를
42+
# snake case라고 한다. camel case, kebab case, pascal case등 다른 종류의 case도
43+
# 있는데, 자세한 내용은 검색해보길 바란다.
44+
45+
# 아래와 같이 리스트를 생성한다.
46+
number_list = [1, 2, 3, 4, 5]
47+
48+
# 리스트의 길이가 곧 리스트에 들어있는 아이템 개수다.
49+
list_length = len(number_list) # 5
50+
51+
# 아래와 같이 리스트의 특정 인덱스에 접근한다.
52+
n = number_list[0] # 0번째 인덱스에는 1이 들어있다.
53+
n = number_list[3] # 3번째 인덱스에는 4가 들어있다.
54+
n = number_list[-1] # 파이썬에서는 뒤에서부터 인덱스를 접근할 수도 있다. n은 5다.
55+
n = number_list[-2] # 뒤에서 두 번째 아이템은 4다.
56+
57+
# 마지막 인덱스는 4다. 즉, 인덱스 5에 해당하는 아이템은 존재하지 않는다.
58+
#n = number_list[5] # list index out of range 에러가 발생한다.
59+
60+
# 특정 인덱스에 있는 값을 바꿀 수도 있다.
61+
number_list[0] = 8 # number_list가 [8, 2, 3, 4, 5]가 된다.
62+
63+
# 리스트의 끝에 새로운 아이템을 더할 수 있다.
64+
number_list.append(123) # number_list가 [8, 2, 3, 4, 5, 123]이 된다.
65+
66+
# 리스트의 끝에 있는 아이템을 제거할 수 있다.
67+
val = number_list.pop() # val에는 제거한 값이 들어간다.
68+
# 여기서 val은 123, number_list는 [8, 2, 3, 4, 5]다.
69+
70+
# 리스트의 특정 인덱스 새로운 아이템을 더할 수 있다.
71+
number_list.insert(2, 123) # 인덱스 2에 해당하는 위치에 123을 추가한다.
72+
# 여기서 number_list는 [8, 2, 123, 3, 4, 5]다.
73+
number_list.insert(999, 123) # 인덱스 999에 해당하는 위치에 123을 추가한다.
74+
# 인덱스 999에 해당하는 자리가 없지만, 조용히 끝에 더해준다.
75+
# 여기서 number_list는 [8, 2, 123, 3, 4, 5, 123]이다.
76+
77+
# 리스트의 특정 인덱스의 아이템을 제거할 수 있다.
78+
del number_list[3] # 인덱스 3에 해당하는 위치에 있는 아이템을 제거한다.
79+
# 여기서 number_list는 [8, 2, 123, 4, 5, 123]이다.
80+
del number_list[-2] # 인덱스 -2, 즉, 뒤에서 두 번재 있는 아이템을 제거한다.
81+
# 여기서 number_list는 [8, 2, 123, 4, 123]이다.
82+
83+
# 리스트에 있는 특정 아이템을 찾아서 제거할 수도 있다.
84+
number_list.remove(2) # 리스트에서 2를 찾아서 제거한다.
85+
# 여기서 number_list는 [8, 123, 4, 123]이다.
86+
number_list.remove(123) # 리스트에서 123을 찾아서 제거한다.
87+
# 이때, 앞에 있는 아이템을 먼저 찾아서 제거한다.
88+
# 여기서 number_list는 [8, 4, 123]이다.
89+
number_list.remove(123)
90+
# 여기서 number_list는 [8, 4]다.
91+
number_list.remove(123) # 없는 값을 제거하려고 시도하면 에러가 발생한다.
92+
```
93+
94+
=== "javascript"
95+
96+
``` js
97+
// WIP
98+
```
99+
100+
=== "C#"
101+
102+
``` cs
103+
// WIP
104+
```
105+
106+
=== "C++"
107+
108+
``` cpp
109+
// WIP
110+
```
111+
112+
## 이름을 통해 접근할 수 있는 자료구조
113+
114+
이름을 통해 접근할 수 있는 자료구조는 일반적으로 다음의 특징을 가지고 있다.
115+
116+
- {x: a, y: b, z: c} 꼴로 표기한다.
117+
- x, y, z를 키(key), a, b, c를 값(value)이라고 하고, (x, a)를 키-값 쌍(key-value pair)이라고 한다.
118+
- 키는 보통 string, 혹은 int타입의 값을 사용한다.
119+
- 꼭 그래야 하는 것은 아니지만, 많은 경우 이렇게 사용할 것이다.
120+
- 자세한 설명은 이후 관련 내용을 다뤄야 할때 설명하도록 하겠다.
121+
- 특정한 키를 통해 값에 접근할 수 있다.
122+
- 위의 예시에서는 x를 통해 a에 접근할 수 있다.
123+
- 그렇기 때문에 키값은 중복될 수 없다.
124+
- 즉, {x: a, x: b} 같이 x라는 키가 두 번 사용될 수 없다.
125+
- 키를 통해 접근한 값을 수정할 수 있다.
126+
- 새로운 키와 값을 할당할 수 있다.
127+
- 키값을 통해 키-값 쌍을 제거할 수 있다.
128+
129+
=== "python"
130+
131+
``` python
132+
# 파이썬에는 dictionary(딕셔너리, 줄여서 dict)를 통해 위의 자료구조가 구현되어 있다.
133+
134+
# 아래와 같이 딕셔너리를 생성한다.
135+
sample_dict = {'a': 123, 10: [1, 2, 3]}
136+
137+
# 키를 통해 값에 접근이 가능하다.
138+
x = sample_dict['a'] # x에 123이 들어간다.
139+
x = sample_dict[10] # x에 [1, 2, 3]이 들어간다.
140+
141+
# 키를 통해 접근한 값을 변경할 수 있다.
142+
sample_dict['a'] += 10 # 값에 접근해서 값을 수정했다.
143+
# 여기서 sample_dict는 {'a': 133, 10: [1, 2, 3]}이 된다.
144+
sample_dict[10] = 42 # 특정 키에 들어있는 값을 덮어썼다.
145+
# 여기서 sample_dict는 {'a': 133, 10: 42}가 된다.
146+
147+
# 새로운 키-값 쌍을 추가할 수 있다.
148+
sample_dict['x'] = 123 # 'x'라는 키에 123이라는 값을 할당했다.
149+
# 여기서 sample_dict는 {'a': 133, 10: 42, 'x': 123}이 된다.
150+
# 123이라는 값이 두 번 들어갔다. 값은 중복이 되어도 상관 없다.
151+
152+
# 키를 통해 키-값 쌍을 제거할 수 있다.
153+
del sample_dict['a'] # 'a'라는 키와 이에 할당된 값을 제거했다.
154+
# 여기서 sample_dict는 {'a': 133, 10: 42, 'x': 123}이 된다.
155+
```
156+
157+
=== "javascript"
158+
159+
``` js
160+
// WIP
161+
```
162+
163+
=== "C#"
164+
165+
``` cs
166+
// WIP
167+
```
168+
169+
=== "C++"
170+
171+
``` cpp
172+
// WIP
173+
```
174+
175+
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
title: "반복문"
3+
---
4+
5+
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }
6+
7+
!!! danger "UNDER CONSTRUCTION"
8+
This page is under construction.
9+
10+
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }

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

+12-8
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,11 @@ title: "타입, 변수, 연산"
250250
i *= 2 # 곱하기도 같은 방식으로 쓸 수 있다. 계산 후 i는 8이 된다.
251251
i //= 3 # 몫 계산도 비슷하게 할 수 있다. 계산 후 i는 2다.
252252

253-
j, k = True, False
253+
j = 3 == 5 # 비교연산. 등호 기호를 두 번 쓰면 양쪽의 값이 같은지 판별한다. 3과 5는 다르므로 j는 False.
254+
k = 3 != 5 # 비교연산. 느낌표 다음 등호 기호를 쓰면 양쪽의 값이 다른지 판별한다. 3과 5는 다르므로 k는 True.
254255
l = j and k # and 연산. 둘 다 True인 경우에만 계산 값이 True가 되고, 그 외에는 False다. l은 False.
255256
m = j or k # or 연산. 둘 다 False인 경우에만 계산 값이 False가 되고, 그 외에는 True다. m은 True.
256-
j = not j # not 연산. True는 False로, False는 True로 바꿔준다. j가 False가 된다.
257+
j = not j # not 연산. True는 False로, False는 True로 바꿔준다. j가 True가 된다.
257258

258259
# 이 외에도 정말 다양한 연산들이 있는데, 이는 다른 연산을 활용하는 경우에 좀 더 자세히 다루도록 하겠다.
259260
```
@@ -279,10 +280,11 @@ title: "타입, 변수, 연산"
279280
i += 2; // i = i + 2를 줄여서 쓴 것이라고 보면 된다. 위에서 i가 2가 되었으므로, 여기서는 4 + 2 = 6이 된다.
280281
i *= 2; // 곱하기도 같은 방식으로 쓸 수 있다. 계산 후 i는 12가 된다.
281282

282-
let j = true, k = false;
283+
let j = 3 == 5 // 비교연산. 등호 기호를 두 번 쓰면 양쪽의 값이 같은지 판별한다. 3과 5는 다르므로 j는 false.
284+
let k = 3 != 5 // 비교연산. 느낌표 다음 등호 기호를 쓰면 양쪽의 값이 다른지 판별한다. 3과 5는 다르므로 k는 true.
283285
let l = j && k; // and 연산. 둘 다 True인 경우에만 계산 값이 True가 되고, 그 외에는 False다. l은 False.
284286
let m = j || k; // or 연산. 둘 다 False인 경우에만 계산 값이 False가 되고, 그 외에는 True다. m은 True.
285-
j = !j; // not 연산. true는 false로, false는 true로 바꿔준다. j가 false가 된다.
287+
j = !j; // not 연산. true는 false로, false는 true로 바꿔준다. j가 true가 된다.
286288

287289
// 이 외에도 정말 다양한 연산들이 있는데, 이는 다른 연산을 활용하는 경우에 좀 더 자세히 다루도록 하겠다.
288290
```
@@ -312,10 +314,11 @@ title: "타입, 변수, 연산"
312314
i += 2; // i = i + 2를 줄여서 쓴 것이라고 보면 된다. 위에서 i가 2가 되었으므로, 여기서는 4 + 2 = 6이 된다.
313315
i *= 2; // 곱하기도 같은 방식으로 쓸 수 있다. 계산 후 i는 12가 된다.
314316

315-
bool j = true, k = false;
317+
bool j = 3 == 5 // 비교연산. 등호 기호를 두 번 쓰면 양쪽의 값이 같은지 판별한다. 3과 5는 다르므로 j는 False.
318+
bool k = 3 != 5 // 비교연산. 느낌표 다음 등호 기호를 쓰면 양쪽의 값이 다른지 판별한다. 3과 5는 다르므로 k는 True.
316319
bool l = j && k; // and 연산. 둘 다 True인 경우에만 계산 값이 True가 되고, 그 외에는 False다. l은 False.
317320
bool m = j || k; // or 연산. 둘 다 False인 경우에만 계산 값이 False가 되고, 그 외에는 True다. m은 True.
318-
j = !j; // not 연산. true는 false로, false는 true로 바꿔준다. j가 false가 된다.
321+
j = !j; // not 연산. true는 false로, false는 true로 바꿔준다. j가 true가 된다.
319322

320323
// 이 외에도 정말 다양한 연산들이 있는데, 이는 다른 연산을 활용하는 경우에 좀 더 자세히 다루도록 하겠다.
321324
```
@@ -345,10 +348,11 @@ title: "타입, 변수, 연산"
345348
i += 2; // i = i + 2를 줄여서 쓴 것이라고 보면 된다. 위에서 i가 2가 되었으므로, 여기서는 4 + 2 = 6이 된다.
346349
i *= 2; // 곱하기도 같은 방식으로 쓸 수 있다. 계산 후 i는 12가 된다.
347350

348-
bool j = true, k = false;
351+
bool j = 3 == 5 // 비교연산. 등호 기호를 두 번 쓰면 양쪽의 값이 같은지 판별한다. 3과 5는 다르므로 j는 false.
352+
bool k = 3 != 5 // 비교연산. 느낌표 다음 등호 기호를 쓰면 양쪽의 값이 다른지 판별한다. 3과 5는 다르므로 k는 true.
349353
bool l = j && k; // and 연산. 둘 다 True인 경우에만 계산 값이 True가 되고, 그 외에는 False다. l은 False.
350354
bool m = j || k; // or 연산. 둘 다 False인 경우에만 계산 값이 False가 되고, 그 외에는 True다. m은 True.
351-
j = !j; // not 연산. true는 false로, false는 true로 바꿔준다. j가 false가 된다.
355+
j = !j; // not 연산. true는 false로, false는 true로 바꿔준다. j가 true가 된다.
352356

353357
// 이 외에도 정말 다양한 연산들이 있는데, 이는 다른 연산을 활용하는 경우에 좀 더 자세히 다루도록 하겠다.
354358
```

0 commit comments

Comments
 (0)