Skip to content

Commit d567378

Browse files
committed
tools - algo - basics
1 parent 3d632b4 commit d567378

File tree

4 files changed

+381
-1
lines changed

4 files changed

+381
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
title: "기초"
3+
---
4+
5+
## 기초
6+
7+
기초적인 알고리즘과 자료구조를 공부하기 위한 자료를 정리한다.
8+
9+
<div class="grid cards" markdown>
10+
- [__타입, 변수, 연산__](./topic/type_var_oper.md)
11+
</div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,356 @@
1+
---
2+
title: "타입, 변수, 연산"
3+
---
4+
5+
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }
6+
7+
## 타입
8+
9+
모든 프로그래밍 언어에는 언어에서 사용할 수 있도록 내부적으로 구현되어있는 타입이 존재한다. 예를 들어, 숫자 계산을 위해 정수 및 실수 타입이 지원되기도 하고, 문자열 처리를 위해 문자 및 문자열 타입이 지원되기도 한다. 아래의 탭에서는 언어 별로 자주 사용되는 타입에 대해 소개한다.
10+
11+
=== "python"
12+
13+
``` python
14+
# 숫자
15+
16+
1
17+
3.6
18+
1e5
19+
12323123123123123123123123123 # 아주 큰 정수도 내부적으로 지원해준다.
20+
21+
# 문자열
22+
23+
'b'
24+
'asdf'
25+
"asdf" # 작은 따옴표와 큰 따옴표가 구분되지 않는다.
26+
'''a
27+
b
28+
c
29+
d''' # 여러 줄로 된 문자열을 만들고 싶으면 작은 따옴표를 세 번 사용하면 된다.
30+
"""a
31+
b
32+
c""" # 큰 따옴표를 세 번 써도 상관 없다.
33+
34+
# boolean
35+
# 대문자로 시작하고, 따옴표를 쓰지 않고 있다는 것에 유의해야 한다.
36+
True
37+
False
38+
```
39+
40+
=== "javascript"
41+
42+
``` js
43+
// 숫자
44+
45+
1
46+
3.6
47+
1e5
48+
12323123123123123123123123123
49+
// 아주 큰 정수도 사용할 수는 있지만, 이를 위해서는 신경써주어야 하는 것이 있다.
50+
// 이에 대해서는 이후에 큰 수를 사용하는 상황에서서 좀 더 자세히 설명하도록 하겠다.
51+
52+
// 문자열
53+
54+
'b'
55+
'asdf'
56+
"asdf" // 작은 따옴표와 큰 따옴표가 구분되지 않는다.
57+
`a
58+
b
59+
c
60+
d` // 여러 줄로 된 문자열을 만들고 싶으면 백틱을 사용한다.
61+
62+
// boolean
63+
// 소문자로 시작하고, 따옴표를 쓰지 않고 있다는 것에 유의해야 한다.
64+
true
65+
false
66+
```
67+
68+
=== "C#"
69+
70+
``` cs
71+
// 숫자
72+
73+
1;
74+
3.6;
75+
1e5;
76+
12323123123123123123123123123;
77+
// 아주 큰 정수도 사용할 수는 있지만, 이를 위해서는 신경써주어야 하는 것이 있다.
78+
// 이에 대해서는 이후에 큰 수를 사용하는 상황에서서 좀 더 자세히 설명하도록 하겠다.
79+
80+
# 문자열
81+
82+
'b'; // 문자 하나는 작은 따옴표로 감싼다.
83+
"asdf"; // 문자열은 큰 따옴표로 감싼다.
84+
@"a
85+
b
86+
c
87+
d"; // 여러 줄로 된 문자열을 만들고 싶으면 앞에 @ 기호를 붙이면 된다.
88+
89+
// boolean
90+
// 소문자로 시작하고, 따옴표를 쓰지 않고 있다는 것에 유의해야 한다.
91+
true;
92+
false;
93+
```
94+
95+
=== "C++"
96+
97+
``` cpp
98+
// 숫자
99+
100+
1;
101+
3.6;
102+
1e5;
103+
12323123123123123123123123123;
104+
// 아주 큰 정수도 사용할 수는 있지만, 이를 위해서는 신경써주어야 하는 것이 있다.
105+
// 이에 대해서는 이후에 큰 수를 사용하는 상황에서서 좀 더 자세히 설명하도록 하겠다.
106+
107+
# 문자열
108+
109+
'b'; // 문자 하나는 작은 따옴표로 감싼다.
110+
"asdf"; // 문자열은 큰 따옴표로 감싼다.
111+
R"(a
112+
b
113+
c
114+
d)"; // 여러 줄로 된 문자열을 만들고 싶으면 앞에 R을 붙이고, 큰 따옴표 안의 내용물을 괄호로 묶어주면 된다.
115+
116+
// boolean
117+
// 소문자로 시작하고, 따옴표를 쓰지 않고 있다는 것에 유의해야 한다.
118+
true;
119+
false;
120+
```
121+
122+
## 변수
123+
124+
변수는 쉽게 말하면 값을 담는 그릇이다. 다음과 같이 사용한다.
125+
126+
=== "python"
127+
128+
``` python
129+
# 파이썬에서는 변수를 선언할때 특별히 신경써주어야 하는 것이 없다.
130+
# 변수에 어떤 타입의 값이 들어갔는지는 이후 코드를 실행하면서 내부적으로 판별한다.
131+
132+
a = 1 # a라는 변수에 1이라는 값을 넣었다고 생각하면 된다.
133+
b, c = 2.5, 'hello' # 여러 변수를 콤마로 구분하여 선언할 수 있다.
134+
a = False # 이미 값을 할당했던 변수에도 다른 값을 넣을 수 있다.
135+
```
136+
137+
=== "javascript"
138+
139+
``` js
140+
// 자바스크립트에서는 변수를 선언할때 앞에 let, const같은 구문을 써서 변수를 선언한다.
141+
// 변수에 어떤 타입의 값이 들어갔는지는 이후 코드를 실행하면서 내부적으로 판별한다.
142+
143+
// 그리고 자바스크립트에서는 줄을 구분할때 세미콜론(`;`)을 붙여도 되고, 붙이지 않아도 된다.
144+
// 다른 여러 언어들에서 줄 구분에 세미콜론을 사용하는 것을 따왔으나, 실제 코드를 실행하는
145+
// 과정에서는 무시하고 넘어간다고 생각해도 좋다. 일반적으로는 세미콜론을 사용하는 것이 좋지만,
146+
// 사용하지 않아도 그러려니 할 수 있으며, 되도록이면 가독성을 위해 코드 전체에서 일관성은
147+
// 유지해주어야 한다.
148+
149+
let a = 1; // `a`라는 변수에 1이라는 값을 넣었다고 생각하면 된다.
150+
const b = 2.5, c = 'hello' // 여러 변수를 콤마로 구분하여 선언할 수 있다.
151+
152+
a = true; // 이미 앞에서 a라는 변수를 선언했으므로 선언 구문을 붙이지 않는다.
153+
let a = true; // <- x. 앞서 사용한 변수 이름을 다시 쓸 수 없다. 이후 코드 작동시 에러가 발생한다.
154+
155+
b = true; // <- x. const로 선언한 변수에는 값을 다시 할당할 수 없다. 코드 작동시 에러가 발생한다.
156+
```
157+
158+
=== "C#"
159+
160+
``` cs
161+
// C#, 혹은, 씨샾에서는 변수를 선언할때 앞에 타입을 같이 적는다.
162+
// 이렇게 선언한 변수는 타입이 고정되므로 다른 타입의 값을 넣을 수 없다.
163+
// 어떤 타입을 사용할 수 있는지는 아래 코드에서 설명하겠다.
164+
165+
// 그리고 C#에서는 줄을 구분할때 세미콜론(`;`)을 붙여야 한다.
166+
167+
int i; // int 타입으로 `a`라는 변수를 선언했다. int는 integer, 즉, 정수를 의미한다.
168+
i = 3; // a라는 변수에 3이라는 값을 할당했다.
169+
i = 10000000000; // <- x. int는 -2,147,483,648 ~ 2,147,483,647 값만 표현 가능하다. 코드 작동시 에러가 발생한다.
170+
171+
// int 타입은 -2^31 ~ (2^31)-1 사이의 정수, 즉, 2^32개의 정수만 표현 가능하다.
172+
// 더 큰 정수를 사용하고 싶으면 `long long`이라는 타입을 사용하면 된다.
173+
// `long` 타입은 -2^63 ~ (2^63)-1 범위의 정수를 표현할 수 있다.
174+
// 즉, -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 값을 쓸 수 있다.
175+
// 편하게는 19자리 정수를 쓸 수 있다고 생각하도록 하자.
176+
long l = 112233445566778899;
177+
178+
double d = 1.23; // 실수는 double 타입으로 선언하면 된다.
179+
180+
char c = 'a', cc = 'b'; // 문자 하나는 char 타입으로 선언한다. 타입이 같은 변수를 콤마로 구분하여 선언할 수 있다.
181+
string s = "str"; // 문자열은 string 타입으로 선언한다.
182+
183+
bool b = true; // boolean값(불리언 값, 혹은, 논리값)은 bool 타입으로 선언한다.
184+
b = 10000; // <- x. b는 bool 타입으로 선언되었으므로 int값을 넣으려고 하면 코드 작동시 에러가 발생한다.
185+
186+
var x = 42; // var로 타입을 지정하면 어떤 값을 할당했는지 보고 자동으로 타입을 맞춰준다.
187+
```
188+
189+
=== "C++"
190+
191+
``` cpp
192+
// C++, 혹은, 씨쁠쁠에서는 변수를 선언할때 앞에 타입을 같이 적는다.
193+
// 이렇게 선언한 변수는 타입이 고정되므로 다른 타입의 값을 넣을 수 없다.
194+
// 어떤 타입을 사용할 수 있는지는 아래 코드에서 설명하겠다.
195+
196+
// 그리고 C++에서는 줄을 구분할때 세미콜론(`;`)을 붙여야 한다.
197+
198+
int i; // int 타입으로 `a`라는 변수를 선언했다. int는 integer, 즉, 정수를 의미한다.
199+
i = 3; // a라는 변수에 3이라는 값을 할당했다.
200+
i = 10000000000; // <- x. int는 -2,147,483,648 ~ 2,147,483,647 값만 표현 가능하다. 코드 작동시 에러가 발생한다.
201+
202+
// int 타입은 -2^31 ~ (2^31)-1 사이의 정수, 즉, 2^32개의 정수만 표현 가능하다.
203+
// 더 큰 정수를 사용하고 싶으면 `long long`이라는 타입을 사용하면 된다.
204+
// `long long` 타입으로는 -2^63 ~ (2^63)-1 사이의 정수를 사용할 수 있는데,
205+
// 정확히는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 값을 쓸 수 있다.
206+
// 편하게는 19자리 정수를 쓸 수 있다고 생각하도록 하자.
207+
long long ll = 112233445566778899;
208+
209+
double d = 1.23; // 실수는 double 타입으로 선언하면 된다.
210+
float f = 1.23; // float도 사용할 수 있다. 다만 double이 좀 더 정밀한 소수점 표현이 가능하다.
211+
212+
char c = 'a', cc = 'b'; // 문자 하나는 char 타입으로 선언한다. 타입이 같은 변수를 콤마로 구분하여 선언할 수 있다.
213+
214+
// c++에서 문자열을 사용하려면 조금 귀찮은 절차를 거쳐야 한다.
215+
// 이곳에서는 사용 방법만 간단히 설명하고, 자세한 내용은 이후에 구체적으로 다루도록 한다.
216+
// 1. char* 이용
217+
char* str1 = "str"; // char 타입 포인터를 사용했다.
218+
// 2. char[] 이용
219+
char str2[4] = "str"; // char 배열을 사용했다.
220+
// 3. string 표준 라이브러리 활용
221+
#include <string> // 이 줄과
222+
using namespace std; // 이 줄로 string이 들어있는 라이브러리를 불러와서 string 타입을 사용할 수 있게 되었다.
223+
string str3 = "str"; // string 타입으로 변수를 선언했다.
224+
225+
bool b = true; // boolean값(불리언 값, 혹은, 논리값)은 bool 타입으로 선언한다.
226+
b = 10000; // <- x. b는 bool 타입으로 선언되었으므로 int값을 넣으려고 하면 코드 작동시 에러가 발생한다.
227+
228+
auto x = 42; // auto로 타입을 지정하면 어떤 값을 할당했는지 보고 자동으로 타입을 맞춰준다.
229+
```
230+
231+
## 연산
232+
233+
변수들을 사용하여 여러 연산들이 가능하다. 타입마다 지원되는 연산들이 다른데, 여기에서는 자주 사용되는 연산자들을 설명하도록 하겠다.
234+
235+
=== "python"
236+
237+
``` python
238+
a = 1
239+
b = 2
240+
c = a + b # a에 1, b에 2가 들어있으니 c에는 1 + 2인 3이 들어있다.
241+
d = a - b # d에는 1 - 2인 -1이 들어있다.
242+
e = 2 * 3 # e에는 2 * 3인 6이 들어있다.
243+
f = 2 / 3 # f에는 2 / 3인 0.66666..이 들어있다.
244+
g = 5 % 3 # g에는 5를 3으로 나눈 나머지인 2가 들어있다. 모듈로라고 한다.
245+
h = 5 // 3 # h에는 5를 3으로 나눈 몫인 1이 들어있다.
246+
247+
i = 1 # i에 1이 들어있다.
248+
i = i + 1 # i에 원래 i값에 1을 더한 값을 대입하라는 뜻이다. 즉, 이 계산을 마치고 나면 i에는 2가 들어있다.
249+
i += 2 # i = i + 2를 줄여서 쓴 것이라고 보면 된다. 위에서 i가 2가 되었으므로, 여기서는 2 + 2 = 4가 된다.
250+
i *= 2 # 곱하기도 같은 방식으로 쓸 수 있다. 계산 후 i는 8이 된다.
251+
i //= 3 # 몫 계산도 비슷하게 할 수 있다. 계산 후 i는 2다.
252+
253+
j, k = True, False
254+
l = j and k # and 연산. 둘 다 True인 경우에만 계산 값이 True가 되고, 그 외에는 False다. l은 False.
255+
m = j or k # or 연산. 둘 다 False인 경우에만 계산 값이 False가 되고, 그 외에는 True다. m은 True.
256+
j = not j # not 연산. True는 False로, False는 True로 바꿔준다. j가 False가 된다.
257+
258+
# 이 외에도 정말 다양한 연산들이 있는데, 이는 다른 연산을 활용하는 경우에 좀 더 자세히 다루도록 하겠다.
259+
```
260+
261+
=== "javascript"
262+
263+
``` js
264+
let a = 1;
265+
let b = 2;
266+
let c = a + b; // a에 1, b에 2가 들어있으니 c에는 1 + 2인 3이 들어있다.
267+
let d = a - b; // d에는 1 - 2인 -1이 들어있다.
268+
let e = 2 * 3; // e에는 2 * 3인 6이 들어있다.
269+
let f = 2 / 3; // f에는 2 / 3인 0.66666..이 들어있다.
270+
let g = 5 % 3; // g에는 5를 3으로 나눈 나머지인 2가 들어있다. 모듈로라고 한다.
271+
let h = Math.floor(5 / 3); // js에서는 나누기의 몫을 구하기 위해 우선 나누기를 한 다음 내림을 해야 한다.
272+
273+
let i = 1; // i에 1이 들어있다.
274+
i = i + 1; // i에 원래 i값에 1을 더한 값을 대입하라는 뜻이다. 즉, 이 계산을 마치고 나면 i에는 2가 들어있다.
275+
i++; // i에 1을 더하는 것은 특별히 이렇게 더 줄일 수 있다. i가 3이 된다.
276+
let i1 = i++; // 이렇게 변수에 값을 넣는 것도 가능하다. i1에 원래의 i값인 3을 넣고, 그 다음 i에 1을 더해서 i가 4가 된다.
277+
let i2 = ++i; // ++연산자가 변수 앞에 붙었다. i에 1을 더하는 시행을 먼저 해서 i가 5가 되고, 그 다음 i2에 i값인 5를 넣는다.
278+
i--; // i에서 1을 뺐다. i가 4가 된다.
279+
i += 2; // i = i + 2를 줄여서 쓴 것이라고 보면 된다. 위에서 i가 2가 되었으므로, 여기서는 4 + 2 = 6이 된다.
280+
i *= 2; // 곱하기도 같은 방식으로 쓸 수 있다. 계산 후 i는 12가 된다.
281+
282+
let j = true, k = false;
283+
let l = j && k; // and 연산. 둘 다 True인 경우에만 계산 값이 True가 되고, 그 외에는 False다. l은 False.
284+
let m = j || k; // or 연산. 둘 다 False인 경우에만 계산 값이 False가 되고, 그 외에는 True다. m은 True.
285+
j = !j; // not 연산. true는 false로, false는 true로 바꿔준다. j가 false가 된다.
286+
287+
// 이 외에도 정말 다양한 연산들이 있는데, 이는 다른 연산을 활용하는 경우에 좀 더 자세히 다루도록 하겠다.
288+
```
289+
290+
=== "C#"
291+
292+
``` cs
293+
int a = 1;
294+
int b = 2;
295+
int c = a + b; // a에 1, b에 2가 들어있으니 c에는 1 + 2인 3이 들어있다.
296+
int d = a - b; // d에는 1 - 2인 -1이 들어있다.
297+
int e = 2 * 3; // e에는 2 * 3인 6이 들어있다.
298+
int f1 = 2 / 3; // f1에는 2 / 3인 0.66666..이 들어있기를 기대할 수 있으나, f1은 정수다. 그래서 나머지 몫인 0이 들어간다.
299+
double f2 = 2 / 3; // f2는 double로 선언했으니 0.66666..이 들어있었으면 좋겠지만, 여기에도 0이 들어간다.
300+
double f3 = 2.0 / 3; // 위의 두 값이 0이 나왔던 이유는 `정수 나누기`였기 때문. 둘 중 한 값이라도 실수여야 실수값이 들어간다.
301+
double f4 = 2 / 3.0; // 이렇게 해도 0.66666..이 나온다.
302+
double f5 = 2.0 / 3.0; // 이렇게 해도 0.66666..이 나온다.
303+
int g = 5 % 3; // g에는 5를 3으로 나눈 나머지인 2가 들어있다. 모듈로라고 한다.
304+
int h = 5 / 3; // 앞서 설명한 정수 나누기가 되어 h에 몫이 들어간다. h는 1이다.
305+
306+
var i = 1; // i에 1이 들어있다.
307+
i = i + 1; // i에 원래 i값에 1을 더한 값을 대입하라는 뜻이다. 즉, 이 계산을 마치고 나면 i에는 2가 들어있다.
308+
i++; // i에 1을 더하는 것은 특별히 이렇게 더 줄일 수 있다. i가 3이 된다.
309+
var i1 = i++; // 이렇게 변수에 값을 넣는 것도 가능하다. i1에 원래의 i값인 3을 넣고, 그 다음 i에 1을 더해서 i가 4가 된다.
310+
var i2 = ++i; // ++연산자가 변수 앞에 붙었다. i에 1을 더하는 시행을 먼저 해서 i가 5가 되고, 그 다음 i2에 i값인 5를 넣는다.
311+
i--; // i에서 1을 뺐다. i가 4가 된다.
312+
i += 2; // i = i + 2를 줄여서 쓴 것이라고 보면 된다. 위에서 i가 2가 되었으므로, 여기서는 4 + 2 = 6이 된다.
313+
i *= 2; // 곱하기도 같은 방식으로 쓸 수 있다. 계산 후 i는 12가 된다.
314+
315+
bool j = true, k = false;
316+
bool l = j && k; // and 연산. 둘 다 True인 경우에만 계산 값이 True가 되고, 그 외에는 False다. l은 False.
317+
bool m = j || k; // or 연산. 둘 다 False인 경우에만 계산 값이 False가 되고, 그 외에는 True다. m은 True.
318+
j = !j; // not 연산. true는 false로, false는 true로 바꿔준다. j가 false가 된다.
319+
320+
// 이 외에도 정말 다양한 연산들이 있는데, 이는 다른 연산을 활용하는 경우에 좀 더 자세히 다루도록 하겠다.
321+
```
322+
323+
=== "C++"
324+
325+
``` cpp
326+
int a = 1;
327+
int b = 2;
328+
int c = a + b; // a에 1, b에 2가 들어있으니 c에는 1 + 2인 3이 들어있다.
329+
int d = a - b; // d에는 1 - 2인 -1이 들어있다.
330+
int e = 2 * 3; // e에는 2 * 3인 6이 들어있다.
331+
int f1 = 2 / 3; // f1에는 2 / 3인 0.66666..이 들어있기를 기대할 수 있으나, f1은 정수다. 그래서 나머지 몫인 0이 들어간다.
332+
double f2 = 2 / 3; // f2는 double로 선언했으니 0.66666..이 들어있었으면 좋겠지만, 여기에도 0이 들어간다.
333+
double f3 = 2.0 / 3; // 위의 두 값이 0이 나왔던 이유는 `정수 나누기`였기 때문. 둘 중 한 값이라도 실수여야 실수값이 들어간다.
334+
double f4 = 2 / 3.0; // 이렇게 해도 0.66666..이 나온다.
335+
double f5 = 2.0 / 3.0; // 이렇게 해도 0.66666..이 나온다.
336+
int g = 5 % 3; // g에는 5를 3으로 나눈 나머지인 2가 들어있다. 모듈로라고 한다.
337+
int h = 5 / 3; // 앞서 설명한 정수 나누기가 되어 h에 몫이 들어간다. h는 1이다.
338+
339+
auto i = 1; // i에 1이 들어있다.
340+
i = i + 1; // i에 원래 i값에 1을 더한 값을 대입하라는 뜻이다. 즉, 이 계산을 마치고 나면 i에는 2가 들어있다.
341+
i++; // i에 1을 더하는 것은 특별히 이렇게 더 줄일 수 있다. i가 3이 된다.
342+
auto i1 = i++; // 이렇게 변수에 값을 넣는 것도 가능하다. i1에 원래의 i값인 3을 넣고, 그 다음 i에 1을 더해서 i가 4가 된다.
343+
auto i2 = ++i; // ++연산자가 변수 앞에 붙었다. i에 1을 더하는 시행을 먼저 해서 i가 5가 되고, 그 다음 i2에 i값인 5를 넣는다.
344+
i--; // i에서 1을 뺐다. i가 4가 된다.
345+
i += 2; // i = i + 2를 줄여서 쓴 것이라고 보면 된다. 위에서 i가 2가 되었으므로, 여기서는 4 + 2 = 6이 된다.
346+
i *= 2; // 곱하기도 같은 방식으로 쓸 수 있다. 계산 후 i는 12가 된다.
347+
348+
bool j = true, k = false;
349+
bool l = j && k; // and 연산. 둘 다 True인 경우에만 계산 값이 True가 되고, 그 외에는 False다. l은 False.
350+
bool m = j || k; // or 연산. 둘 다 False인 경우에만 계산 값이 False가 되고, 그 외에는 True다. m은 True.
351+
j = !j; // not 연산. true는 false로, false는 true로 바꿔준다. j가 false가 된다.
352+
353+
// 이 외에도 정말 다양한 연산들이 있는데, 이는 다른 연산을 활용하는 경우에 좀 더 자세히 다루도록 하겠다.
354+
```
355+
356+
[:material-arrow-left-bold: 글 목록](../index.md){ .md-button }

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

+8-1
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,17 @@ title: "자료구조와 알고리즘"
33
---
44

55
## [__계산기하__](./computational-geometry/index.md)
6+
67
컴퓨터로 연산 가능한 도형 문제들에 대하여.
78

89
## [__설계 자동화__](./design-automation/index.md)
10+
911
정보로 구조화된 건물과 이들을 자동으로 생성하는 방법에 대하여.
1012

1113
## [__공간구문론__](./space-syntax/index.md)
12-
연결되어있는 공간들과 분석법에 대하여.
14+
15+
연결되어있는 공간들과 분석법에 대하여.
16+
17+
## [__기초__](./basics/index.md)
18+
19+
기초적인 공부 자료를 정리해두었다.

0 commit comments

Comments
 (0)