Skip to content

Commit 5702397

Browse files
authored
update: qna list week-15 (#76)
1 parent 53b5bb3 commit 5702397

File tree

3 files changed

+223
-5
lines changed

3 files changed

+223
-5
lines changed

디자인패턴/README.md

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# 디자인패턴
2+
3+
<details>
4+
<summary><strong>💡 MVC 패턴이란</strong></summary>
5+
MVC(Model-View-Controller)는 데이터, 사용자 인터페이스, 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴이다. 소프트웨어의 비즈니스 로직과 화면을 구분, 즉 "관심사 분리"에 중점을 두고 있다.
6+
<ul>
7+
<li>Model: 데이터와 비즈니스 로직 관리</li>
8+
<li>View: 레이아웃과 화면 처리</li>
9+
<li>Controller: 명령을 Model과 View로 라우팅</li>
10+
</ul>
11+
<img src="https://user-images.githubusercontent.com/70627979/221409309-01e157c8-937d-4dbb-8cef-f610fa067359.png" alt="image" style="zoom: 25%;" />
12+
</details>

자료구조/README.md

+95-5
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
<li>알고리즘이란 자료구조에 쌓인 데이터를 활용해 어떠한 문제를 해결하기 위한 여러 동작들의 모임이다.</li>
88
</ul>
99
</details>
10-
1110
<details>
1211
<summary><strong>💡 ArrayList와 LinkedList</strong></summary>
1312
<ul>
@@ -29,6 +28,25 @@
2928
</li>
3029
</ul>
3130
</details>
31+
32+
<details>
33+
<summary><strong>💡 List와 Set의 차이</strong></summary>
34+
<ul>
35+
<li>
36+
List는 중복이 허용되지만, Set은 중복이 허용되지 않는다.
37+
<ul>
38+
<li>List의 데이터를 Set에 삽입하면, 중복이 제거된다.</li>
39+
</ul>
40+
</li>
41+
<li>
42+
Set은 고유성이 보장된다.
43+
<ul>
44+
<li>DB의 <code>distict</code> 연산을 하는 효과를 갖는다.</li>
45+
</ul>
46+
</li>
47+
</ul>
48+
</details>
49+
3250
<details>
3351
<summary><strong>💡 큐와 스택의 차이</strong></summary>
3452
<ul>
@@ -80,7 +98,6 @@
8098
<li>해시 테이블은 key-value 가 1:1 로 매핑되어 있기 때문에 검색, 삽입, 삭제 과정에서 모두 평균적으로 O(1)의 시간 복잡도를 갖는다.</li>
8199
</ul>
82100
</details>
83-
84101
<details>
85102
<summary><strong>💡 연결 리스트란?</strong></summary><ul>
86103
<li>각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어있는 방식으로 데이터를 저장하는 자료구조</li>
@@ -89,6 +106,44 @@
89106
</ul>
90107
</details>
91108

109+
<details>
110+
<summary><strong>💡 BST와 Binary Tree의 차이점은?</strong></summary>
111+
<ul>
112+
<li>
113+
이진트리(Binary Tree)
114+
<ul>
115+
<li>
116+
자식노드가 최대 두개인 노드들로 구성되었다.
117+
<ul>
118+
<li>왼쪽 자식노드</li>
119+
<li>오른쪽 자식노드</li>
120+
</ul>
121+
</li>
122+
<li>자료 삽입, 삭제 방법에 따라 종류가 나뉜다.</li>
123+
</ul>
124+
</li>
125+
<li>
126+
이진 탐색 트리(Binary Search Tree)
127+
<ul>
128+
<li>
129+
모든 왼쪽 자식노드 값이 루트나 부모 노드보다 작고, 모든 오른쪽 자식노드 값이 루트나 부모노드보다 크다.
130+
</li>
131+
<li>
132+
이진트리에 비해 탐색 속도가 빠르다. (<code>O(h)</code>, h는 트리의 높이)
133+
</li>
134+
<li>
135+
균형 잡힌 트리가 아닌 경우, 한쪽으로 쏠린 모양이 나타날 수 있다.
136+
<ul>
137+
<li>이 경우, 이진트리보다 탐색 속도가 느려진다. (<code>O(n)</code>)</li>
138+
<li>이를 위해 설계된 자료구조가 AVL Tree 이다.</li>
139+
<li>해당 문제 해결을 위해, 삽입과 삭제 시 트리 구조를 재조정하는 알고리즘을 추가할 수 있다.</li>
140+
</ul>
141+
</li>
142+
</ul>
143+
</li>
144+
</ul>
145+
</details>
146+
92147

93148
<details>
94149
<summary><strong>💡 BST의 문제점과 해결방안</strong></summary><ul>
@@ -97,6 +152,28 @@
97152
</ul>
98153
</details>
99154

155+
<details>
156+
<summary><strong>💡 Red Black Tree란?</strong></summary>
157+
<ul>
158+
<li>
159+
레드 블랙 트리는 자기 균형 이진 탐색 트리(Self-Balancing BST)이다.
160+
</li>
161+
<li>
162+
이진탐색 트리에서의 조회 시간 복잡도는 <code>O(log n)</code>이 소요되나, 균형이 무너질 경우 <code>O(n)</code>으로 시간 복잡도가 증가할 수 있습니다. 이를 보완하기 위해 레드 블랙 트리에서는 삽입, 삭제 동안 트리의 모양의 균형을 이루도록 각 노드에 red와 black 색상을 가지도록 설계되었다.
163+
</li>
164+
<li>
165+
결과적으로 레드 블랙 트리는 자기 균형을 이루고 있기 때문에 검색, 삽입, 삭제 연산 시 worst case에서도 <code>O(log n)</code>의 시간 복잡도를 보장한다.
166+
</li>
167+
<img src="https://user-images.githubusercontent.com/70627979/221402026-96e8ef11-a332-4971-9b4b-24e5d550785b.png" alt="image" style="zoom:100%;" />
168+
</ul>
169+
</details>
170+
171+
172+
<details>
173+
<summary><strong>💡 그래프와 트리의 차이점은?</strong></summary>
174+
<img width="564" alt="image" src="https://user-images.githubusercontent.com/70627979/218324529-b9bc059f-8dbf-4967-86dd-87f297ad7ba0.png">
175+
</details>
176+
100177
<details>
101178
<summary><strong>💡 트리 순회의 순서(전위, 중위, 후위)</strong></summary>
102179
<ul>
@@ -121,9 +198,6 @@
121198
<li>최대 힙 : 최대값부터 삭제됨</li>
122199
<li>최소 힙 : 최소값부터 삭제됨</li>
123200
</ul>
124-
<li>최대 힙 삭제 과정</li/>
125-
<img src="https://s3.us-west-2.amazonaws.com/secure.notion-static.com/1893b9c8-97c3-4f7f-9b28-1031239898ef/max_heap_deletion_animation.gif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20230207%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20230207T084545Z&X-Amz-Expires=86400&X-Amz-Signature=54efd328bc9bb3b1c910de9ebbaaa4059bccb6e147b065e6d029e9803d71632b&X-Amz-SignedHeaders=host&response-content-disposition=filename%3D%22max_heap_deletion_animation.gif%22&x-id=GetObject" alt="image"/>
126-
</li>
127201
<ol>
128202
<li>루트 노드가 삭제</li>
129203
<li>마지막 노드가 루트 노드의 자리로 이동</li>
@@ -163,3 +237,19 @@
163237
⇒ 우선순위 큐는 힙으로 구현됨
164238
</ul>
165239
</details>
240+
<details>
241+
<summary><strong>💡 Binary Heap이란?</strong></summary>
242+
Binary Heap은 Tree 형식을 하고 있으며, Tree 중 배열을 기반으로 하는 완전 이진 트리(Complete Binary Tree) 이다. 힙에는 최대 힙(max heap)과 최소 힙(min heap) 두 종류가 있다.
243+
<ul>
244+
<li>
245+
최대 힙은 각 노드의 값이 해당 자식의 값보다 크거나 같은 완전 이진 트리를 말한다.
246+
</li>
247+
<li>
248+
최소 힙은 최대 힙과 반대되는 개념으로 각 노드의 값이 해당 자식의 값보다 작은 완전 이진 트리를 말한다.
249+
</li>
250+
<li>
251+
배열을 기반으로 하는 Binary Tree의 값을 넣을 때, 1번 index부터 루트 노드가 시작된다. 0번 index를 건너뛰는 이유는 노드의 고유 번호 값과 배열의 index를 일치시켜 혼동을 줄이기 위함이다.
252+
</li>
253+
</ul>
254+
<img src="https://user-images.githubusercontent.com/70627979/221401328-145ba7bd-7d2f-49db-8b35-435077393d4a.png" alt="image" style="zoom:40%;" />
255+
</details>

컴퓨터구조/README.md

+116
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
# 컴퓨터구조
2+
3+
<details>
4+
<summary><strong>💡 폰 노이만 아키텍처 vs 하버드 아키텍처</strong></summary>
5+
폰 노이만 아키텍처와 하버드 아키텍처는 컴퓨터 구조의 한 종류이다.
6+
<ul>
7+
<li>
8+
폰 노이만 아키텍처
9+
<ul>
10+
<li>존 폰 노이만이 제안한 구조로, 프로그램 내장 방식이라고도 부른다. </li>
11+
<li>메모리 안에 명령어(프로그램) 영역과 데이터 영역이 혼재되어 있는 형태이다.</li>
12+
<li>이전에는 컴퓨터의 하드웨어를 재배치해야만 소프트웨어를 교체할 수 있었지만, 폰 노이만 아키텍처를 도입함으로써 컴퓨터 프로그램 범용성이 크게 향상되었다.</li>
13+
<li>CPU가 명령어와 데이터에 동시 접근할 수 없고, 메모리의 값을 읽고 쓰는 구조이기 때문에 병목 현상이 생길 수 밖에 없다. </li>
14+
</ul>
15+
</li>
16+
<li>
17+
하버드 아키텍처
18+
<ul>
19+
<li>폰 노이만 구조의 문제점을 극복하기 위해 명령어 메모리와 데이터 메모리가 분리되어 병렬적으로 작업이 처리되도록 구현한 구조이다. </li>
20+
<li>명령을 읽는 작업과 데이터를 읽는 작업을 동시에 할 수 있어 속도가 더 빠르다. </li>
21+
<li>회로 구조가 복잡하고 메모리가 공간을 많이 차지하게 된다. </li>
22+
</ul>
23+
</li>
24+
<li>현대 컴퓨터는 CPU 외부적으로는 폰 노이만 구조를, 내부는 하버드 구조를 적용하는 하이브리드 구조를 도입하여 속도를 향상시켰다. </li>
25+
</ul>
26+
<img src="https://user-images.githubusercontent.com/70627979/221409501-f9fb52b9-d127-4723-ac05-5be69d9cf7be.png" alt="image" style="zoom:50%;" />
27+
</details>
28+
29+
<details>
30+
<summary><strong>💡 CISC vs RISC</strong></summary>
31+
<ul>
32+
<li>
33+
CISC(Complex Instruction Set Computer)
34+
<ul>
35+
<li>연산을 처리하는 복잡한 명령어들을 수백개 이상 탑재하고 있는 프로세서이다. </li>
36+
<li>명령어마다 실행하는 시간이 다르다.</li>
37+
<li>복합 명령을 가짐으로써 하위 호환성이 높지만, 전력 소모가 크고 속도가 느리며 비싸다.</li>
38+
</ul>
39+
</li>
40+
<li>
41+
RISC(Reduced Instruction Set Computer)
42+
<ul>
43+
<li>사용 빈도가 높은 20%의 명령어를 기반으로 최소한의 명령어 세트를 구성한 프로세서이다. </li>
44+
<li>명령어마다 실행하는 시간이 동일하다.</li>
45+
<li>하드웨어가 간단한 대신 소프트웨어가 복잡하고 크기가 커졌다.</li>
46+
<li>호환성이 부족하지만, 전력 소모가 적고 속도가 빠르며 가격이 저렴한 편이다. </li>
47+
</ul>
48+
</li>
49+
</ul>
50+
</details>
51+
52+
<details>
53+
<summary><strong>💡 API, ABI, ISA란 무엇인가</strong></summary>
54+
<ul>
55+
<li>
56+
ISA(Intruction Set Architecture)
57+
<ul>
58+
<li>마이크로 프로세서가 인식해서 기능을 이해하고 실행할 수 있는 기계어 명령어 셋이다.</li>
59+
<li>C언어 등으로 작성된 프로그램이 ISA 규칙에 맞게 적절히 기계어로 번역되면CPU가 이를 읽고 해석한 후 실행한다. </li>
60+
<li>하나의 CPU는 하나의 ISA만 사용한다. </li>
61+
</ul>
62+
</li>
63+
<li>
64+
ABI(Application Binary Interface)
65+
<ul>
66+
<li>특정 아키텍처에서 두 개 이상의 소프트웨어 간의 바이너리 인터페이스를 정의한다.</li>
67+
<li>ABI가 호환되어야 프로그램을 실행시킬 수 있다. mac 환경에서 window 응용 프로그램을 실행할 수 없는 이유가 바로 ABI가 호환되지 않기 때문이다.</li>
68+
<li>ex) Windows 와 Windows RT와의 관계</li>
69+
</ul>
70+
</li>
71+
<li>
72+
API(Application Programming Interface)
73+
<ul>
74+
<li>코드 레벨에서 다른 소프트웨어와 통신하는 인터페이스를 정의한다.</li>
75+
</ul>
76+
</li>
77+
</ul>
78+
</details>
79+
80+
<details>
81+
<summary><strong>💡 고정 소수점과 부동 소수점</strong></summary>
82+
컴퓨터에서는 실수를 고정 소수점 과 부동 소수점 으로 표현한다.
83+
<ol>
84+
<li>
85+
고정 소수점 (Fixed Point)
86+
<ul>
87+
<li>소수점이 찍힐 위치를 미리 정해놓고 소수를 표현 (정수 + 소수)</li>
88+
<li>ex) 3.141592 (부호, 정수부, 소수부)</li>
89+
<li>장점 : 실수부를 정수부와 소수부 만으로 표현하여 비교적 단순하다.</li>
90+
<li>단점 : 표현의 범위가 한정적이다. (정수부 : 15bit, 소수부 : 16bit)</li>
91+
</ul>
92+
<img src="https://user-images.githubusercontent.com/70627979/221410024-d2b43e01-b843-4902-a068-b35bfca3d1cf.png" alt="image" style="zoom:70%;" />
93+
</li>
94+
<li>
95+
부동 소수점(Floating Point)
96+
<ul>
97+
<li>
98+
실수부를 가수부 와 지수부 로 표현한다.
99+
<ul>
100+
<li>가수부 : 실수의 실제 값 표현</li>
101+
<li>지수부 : 크기를 표현, 가수의 어디 쯤 소수점이 있는지 표현</li>
102+
</ul>
103+
</li>
104+
<li>
105+
지수의 값에 따라 소수점이 움직이는 방식을 활용한 실수 표현 방법이다.
106+
<ul>
107+
<li>소수점의 위치가 고정되어 있지 않는다.</li>
108+
</ul>
109+
</li>
110+
<li>장점 : 표현할 수 있는 수의 범위가 넓음</li>
111+
<li>단점 : 오차 발생의 가능성 존재</li>
112+
</ul>
113+
<img src="https://user-images.githubusercontent.com/70627979/221410074-058fb865-c8cb-498a-936b-94aff9b98cc1.png" alt="image" style="zoom:70%;" />
114+
</li>
115+
</ol>
116+
</details>

0 commit comments

Comments
 (0)