Today, What I learned?
์ฐฝ๋ฏผ ํํฐ๋์ CSํน๊ฐ๊ณผ ๊ณ์๋๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ์ ์ ์.. ๐ฅ
์ค๋์ CS ํน๊ฐ์์ ๋ค์ CPU์ ์ด์ง ํ์, ์ฌ๊ทํจ์์ ๋ํด์ ์ ๋ฆฌํ๋ค!
ํน๊ฐ ๊ด๋ จํด์๋ง ์ ๋ฆฌํด๋ ์์ด ๊ฝค ๋ง๊ธด ํ์ง๋ง.. ์ ๋ฆฌ ์์! ๐
CPU
ํํ๋ค ์ปดํจํฐ ๊ฒฌ์ ์ ๋ฐ์ง ๋ ๋ง์ด ๋ณด๋ ๊ฒ๋ค ์ค์ ํ๋๋ก ์ต์ํ ์ ์๋ค!..
Central Processing Unit์ ์ฝ์๋ก ์ค์ ์ฒ๋ฆฌ ์ฅ์น๋ฅผ ๋งํ๋ค. CPU๋ ์ปดํจํฐ์ ๋๋๋ผ๊ณ ํ ์ ์๋ค.
์ปดํจํฐ ์์คํ ์ ์ฒด๋ฅผ ์ ์ดํ๋ฉฐ ๋ช ๋ น์ด๋ฅผ ์ํํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค.
์ฒ๋ฆฌ์ฅ์น์ ์ ์ด์ฅ์น๋ก ๊ตฌ์ฑ๋์ด ์๊ณ , CPU์๋ ์บ์ ๊ฐ์ ๋ถ๊ฐ ์ฅ์น๋ ํฌํจ๋์ด ์๋ค.
์ CPU๋ ์ฑ๊ธ ์ฝ์ด์์ ๋ฉํฐ ์ฝ์ด๊ฐ ๋์๋๊ฐ?
๊ฒฐ๋ก ์ ์ผ๋ก ์ฑ๊ธ์ฝ์ด๋ง์ผ๋ก ๋ผ ์ ์๋ ํผํฌ๋จผ์ค์ ํ๊ณ๊ฐ ์์๊ธฐ ๋๋ฌธ์ ๋ฉํฐ์ฝ์ด๊ฐ ๋ฑ์ฅํ๋ค.
์ฝ์ด์ ๊ฐ์๋ง๋ค ๊ฐ์ฅ ๋น ๋ฅธ ์ฒ๋ฆฌ์๋๋ฅผ ์๋ํ๋ ๋ ์ง์คํฐ ์ธํธ๊ฐ ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด ๋์ฑ ๋์์ง๋ค.
์ฑ๊ธ์ฝ์ด์ ๋ณธ์ง์ ์ธ ํ๊ณ๋ฅผ ๋ฉํฐ์ฝ์ด๋ ์ด ์์ค ๊ฐ์, ๋น ๋ฅธ ์์ ์ํ์ผ๋ก ๊ทน๋ณตํ๋ค.
CPU์ ๊ตฌ์ฑ
์ฐ์ ๋ ผ๋ฆฌ์ฐ์ฐ์ฅ์น(ALU)
- ์ฐ์ ์ฐ์ฐ์ฅ์น, ๋ ผ๋ฆฌ ์ฐ์ฐ์ฅ์น ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- ์ฐ์ ์ฐ์ฐ ์ฅ์น๋ ๋ง์ , ๋บ์ ๊ฐ์ ์ฐ์ ์ฐ์ฐ์ ํ๋ค.
- ๋ ผ๋ฆฌ ์ฐ์ฐ ์ฅ์น๋ ๋ ผ๋ฆฌํฉ, ๋ ผ๋ฆฌ๊ณฑ ๊ฐ์ ๋ ผ๋ฆฌ ์ฐ์ฐ์ ํ๋ค.
์ ์ด์ฅ์น(CU)
- ๋ชจ๋ ์ฅ์น๋ค์ ์ข ์์ ์ง์ํ๊ณ ์ ์ดํ๋ค.
- ๋ช ๋ น ๋ ์ง์คํฐ์์ ์ฝ์ด ๋ค์ธ ๋ช ๋ น์ด๋ฅผ ํด๋ ํด์ ์ ํธ๋ฅผ ๋ณด๋ด ์ ํํ ์ํ์ ํ๋๋ก ํ๋ค.
๋ ์ง์คํฐ
๋ฒ์ฉ ๋ ์ง์คํฐ(general purpose register)
- ์ด ๋ ์ง์คํฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์์ ์ผ๋ก ์ ์ฅํ๋ ์ญํ ์ ํ๋ค.
- EAX(์ฐ์ ์ฐ์ฐ), EBX(๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ ์ฅ), ECX(๋ฐ๋ณต ๋ช ๋ น์ด(for, while๋ฌธ ๊ฐ์) ์ํ) ๋ฑ ์ด 8๊ฐ์ง ์ข ๋ฅ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- ์๊ท๋ชจ์ ์ผ์์ ์ธ ๊ธฐ์ต ์ฅ์น๋ค.
- ํ๋ก๊ทธ๋จ์ ์งํํ๋ฉฐ ๊ฐ๊น์ด ์๊ฐ ๋ด์ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ผ์์ ์ผ๋ก ๊ธฐ์ตํ ๋ ์ฌ์ฉํ๋ค.
ํน์ ๋ ์ง์คํฐ (special purpose register)
ํน์ ๋ ์ง์คํฐ๋ ์ด๋ฆ์ฒ๋ผ ํน์ํ ๊ธฐ๋ฅ์ ์ํํ๋ค.
ํฌ๊ฒ ์ธ ๊ฐ์ง๋ก ๋๋ ๋ณผ ์ ์๋ค.
1) ์ฃผ์๋ฅผ ๊ธฐ์ตํ๋ ๋ ์ง์คํฐ
- ํ๋ก๊ทธ๋จ ์นด์ดํฐ(PC)
- ๋ค์์ ์ํ๋ ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ํ์ฌ ์ฒ๋ฆฌํ๋ ค๋ ๋ฐ์ดํฐ๋ฅผ ์ธ์ถํ ํ์๋ ์๋์ ์ผ๋ก 1์ ์ฆ๊ฐํ๋ค. (์นด์ดํฐ์ธ ์ด์ !)
- ์ด ์ธ์๋ ๊ธฐ์ต ์ฅ์น ์ฃผ์๋ฅผ ์์ ์ ์ฅํ๋ MAR, SP(์คํ ํฌ์ธํฐ) ๋ฑ์ด ์๋ค.
2) ๋ช ๋ น์ด ๋ ์ง์คํฐ
๊ฐ์ฅ ์ต๊ทผ์ ์ธ์ถ๋ ๋ช ๋ น์ด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ ์ง์คํฐ๋ค.
3) ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ตํ๋ ๋ ์ง์คํฐ
- ๊ธฐ์ต์ฅ์น ๋ฒํผ ๋ ์ง์คํฐ(MBR)
- ๊ธฐ์ต์ฅ์น์ ์ฐ์ผ ๋ฐ์ดํฐ๋ ์ฝํ ๋ฐ์ดํฐ๋ฅผ ์์๋ก ์ ์ฅํ๋ ๊ธฐ์ต์ฅ์น
- ๋์ฐ๊ธฐ(AC)
- ๋ฐ์ดํฐ๋ฅผ ์ผ์์ ์ผ๋ก ์ ์ฅํ๋ ๋ ์ง์คํฐ
CPU ๋ช ๋ น์ด ์ฌ์ดํด
- ๋ช ๋ น์ด ์ธ์ถ (fetch cycle) : ๋ช ๋ น์ด ์ฃผ์๋ฅผ ๊ณ์ฐํ๊ณ ๊ทธ ์ฃผ์์์ ๋ช ๋ น์ด๋ฅผ ๊ฐ์ ธ์ค๋ ๋จ๊ณ
- ๋ช ๋ น์ด ํด๋ (decode) : CU์ ๋์ฝ๋ฉ์ ํตํด ๋ช ๋ น์ด๋ฅผ ์ด๋ป๊ฒ ์ํํ ์ง ๊ฒฐ์ ํ๋ค.
- ๋ฐ์ดํฐ ์ธ์ถ (data fetch) : Operand๊ฐ ์ฐ์ฐ์์ ๋์์ ์์น๋ฅผ ๊ณ์ฐํด์ ๋ถ๋ฌ์จ๋ค.
- ๋ช ๋ น์ด ์คํ (execute) : ๋ช ๋ น์ด๋ฅผ ALU๋ฅผ ํตํด ์คํํ๋ค.
- ์ ์ฅ : ์ํ๋ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ํ์์ ๋ฐ๋ผ ๋ ์ง์คํฐ๋ ๊ธฐ์ต ์ฅ์น์ ์ฐ์ธ๋ค.
์บ์
- CPU์ ๋์คํฌ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ขํ๊ธฐ ์ํด ๋น๋ฒํ๊ฒ ์ฌ์ฉ๋๊ฑฐ๋, ์ต๊ทผ์ ์ฌ์ฉ๋์๋ ๋ฐ์ดํฐ๋ค์ ๋ชจ์๋๋ ์ ์ฅ๊ณต๊ฐ์ด๋ค.
- ๋น ๋ฅธ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- ์ฃผ๊ธฐ์ต์ฅ์น์ธ ๋์คํฌ์ ์ํ ์๋ ๊ฐ์ ์ ์ํ ๋ฐฉ๋ฒ ์ค ํ๋!
CPU์ ํ๋ก๊ทธ๋๋จธ๊ฐ ํต์ ํ๋ ๊ณผ์
CPU๋ ๊ธฐ๊ณ์ด๋ฐ์ ์์ง ๋ชปํ๋ค. ๊ธฐ๊ณ์ด๋ 0,1๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๊ธฐ ๋๋ฌธ์ ์ฌ๋์ด ์์๋ณด๊ธฐ ๋น์ฐํ ์ด๋ ต๋ค!..
์ด๋ฐ ๋ช
๋ น์ด๋ฅผ ์ฌ๋์ด ์ข ๋ ์ฝ๊ฒ ์์๋ณด๋๋ก ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ฒ์ด ์ด์
๋ธ๋ฆฌ์ด.
์ด์ ๋ธ๋ฆฌ์ด๋ ์ปดํจํฐ์ ์ผ๋์ผ๋ก ๋์์ด ๋์ด ๋น ๋ฅธ ์ํ ์๋๋ฅผ ์๋ํ์ง๋ง, ๊ทธ๋งํผ ๋ฐฐ์ฐ๊ธฐ๊ฐ ์ด๋ ต๊ณ ์ ์ง๋ณด์๊ฐ ํ๋ค๋ค๋ ์ ...
๊ทธ๋์ ๊ธฐ๊ณ ์ค์ฌ์ ์ธ์ด์ธ ์ ๊ธ ์ธ์ด(Low-level Language)์ ๋ฐ๋๋๋ ์ฌ๋ ์ค์ฌ์ ์ธ์ด, ๊ณ ๊ธ ์ธ์ด(High-Level Language)๊ฐ ๋ฑ์ฅํ๋ค.
LISP, BASIC, C, Java ๋ฑ๋ฑ!..
์ด๋ฐ ๊ณ ๊ธ ์ธ์ด๋ค์ ์ปดํ์ผ๋ฌ๋ฅผ ํตํด ๋ฒ์ญ ๊ณผ์ ์ ๊ฑฐ์ณ์ ์คํ๋๋ค.
์ด์ง ํ์
์ด์ง ํ์์ ํ์ ๋ฐฉ๋ฒ ์ค ํ๋! ํน์ ํ ๊ฐ์ ์ฐพ๊ธฐ ์ํด ์ฌ์ฉํ๋๋ฐ, ์ผ์ ํ ๊ท์น์ผ๋ก ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ง ํ์ํ ์ ์๋ค.
O(logN)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
์ด์ง ํ์์ ์ด๋ค ๋ฐฉ์์ผ๋ก ์งํ๋๋๊ฐ??
์ค๊ฐ์ ์๋ ์์์ ๊ฐ์ ์ ํํด์ ์ฐพ๊ณ ์ ํ๋ ๊ฐ๊ณผ ๋น๊ตํ๋ค.
๋ง์ฝ ์ด ์ค๊ฐ๊ฐ์ด ์ฐพ๋ ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์ค๊ฐ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ, ๋ ํฌ๋ค๋ฉด ์ค๋ฅธ์ชฝ์ ๋์์ผ๋ก ๋ค์ ํ์ํ๊ณ ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌํํ ์ด์งํ์
const finding_target = 14;
const finding_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
function solution(target, array) {
let currentMin = 0;
let currentMax = array.length - 1;
let currentGuess = Math.floor((currentMin + currentMax) / 2);
while (currentMin <= currentMax) {
if (array[currentGuess] === target) {
return true;
} else if (array[currentGuess] < target) {
currentMin = currentGuess + 1;
} else {
currentMax = currentGuess - 1;
}
currentGuess = Math.floor((currentMin + currentMax) / 2);
}
return false;
}
์ต์๊ฐ๊ณผ ์ต๋๊ฐ, ์ค๊ฐ๊ฐ์ ์ค์ ํ๋ค.
์ต์๊ฐ์ด ์ต๋๊ฐ๋ณด๋ค ์ปค์ง์ง ์์ ๋๊น์ง ํ๊น ๊ฐ์ ์ฐพ๋ ๊ณผ์ ์ ๋ฐ๋ณต!..
๋ง์ฝ ์ค๊ฐ๊ฐ์ด ํ๊น ๊ฐ๋ณด๋ค ์๋ค๋ฉด ์ต์๊ฐ์ 1 ์ถ๊ฐํ์ฌ ์ค๊ฐ๊ฐ์ ๋ค์ ํ์ํ๋ค.
๋ฐ๋์ ๊ฒฝ์ฐ๋ ์ต๋๊ฐ์ 1 ๊ฐ์.
์ฌ๊ท ํจ์
์๊ธฐ ์์ ์ ๊ณ์ ๋ฐ๋ณตํด์ ๋ถ๋ฅด๋ ํจ์๋ค.
๊ฐ๊ฒฐํ๊ณ ๋ช
ํ์ฑ ์๋ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉํ๋๋ฐ, ๋ฐ๋์ ๋น ์ ธ๋๊ฐ๋ ์ง์ ์ธ ํฐ๋ฏธ๋ ์ปจ๋์
์ ๋ช
์ํด์ฃผ์ด์ผ ํ๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฌดํ ๋ฃจํ์ ๋น ์ ธ์ ์๋ฌ ๋ฐ์!..
๋ฐ๋ณต๋ฌธ์ผ๋ก๋ ์ฝ๋๊ฐ ๋ณต์กํด์ง๋ค๊ฑฐ๋.. ๊ฐ์ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ฉด ์ข๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌํํ ์ฌ๊ท ํจ์
function palindrome(string) {
if (string.length <= 1) {
// ํฐ๋ฏธ๋ ์ปจ๋์
return true;
} else if (string[0] !== string[string.length - 1]) {
return false;
}
return palindrome(string.slice(1, string.length - 1));
}
์ ๋ช
ํ ํฐ๋ฆฐ๋๋กฌ ๋ฌธ์ ๋ฅผ ์ฌ๊ท ํจ์๋ก ๊ตฌํํด๋ณด์๋ค.
ํฐ๋ฆฐ๋๋กฌ์ '์ค๋์ค', '์ฐ์์ฐ', '์์ฃผ๋ง๋ณ๋ง์ฃผ์' ์๊ฐ์ด ๊ฐ๊ฐ ์ฒซ ๊ธ์, ๋ ๊ธ์๊ฐ ์ผ์นํด์ผ ํ๊ธฐ ๋๋ฌธ์
slice ๋ฉ์๋๋ก ๊ธ์ ๊ธธ์ด๋ฅผ ์กฐ์ ํด์ ์ฌ๊ท ํจ์๋ฅผ ํธ์ถํ๋ค.
์ฌ๊ท ํจ์์ ๋ฐ๋์ ํฐ๋ฏธ๋ ์ปจ๋์
์ด ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์!..
๊ฐ์ด๋ฐ ๊ธ์๋ง ๋จ๋ ๊ฒฝ์ฐ์๋ true
๋ฅผ ๋ฐํํ๋๋ก ํ๊ณ , ๋ง์ฝ ๊ธ์๋ค์ด ์ผ์นํ์ง ์๋๋ค๋ฉด false
๋ฅผ ๋ฐํํ๋๋ก ํ๋ค.
์ค๋ TIL ์ ๋ ..๊ธธ๋ค..
์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ์ ์๋ ํ์ผ ๋ง๋ฌด๋ฆฌ~~ ๐
์ฃผ๋ง ๋์์ ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ ๋ ํ๊ณ , ๋๋ง์๊ธฐ ์๋ฌ ์ฒ๋ฆฌ.. ๋ฐ๋์ ๋๋ธ๋ค!! ๐
'๐ Studying > ๐ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ์คํฌ๋ฆฝํธ๋ง์ผ๋ก SPA ๊ตฌํ (0) | 2022.11.16 |
---|---|
TIL : ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ, display:table ์์ฑ (0) | 2022.11.14 |
[JavaScript] ์ฐ๊ฒฐ๋ฆฌ์คํธ Linked List in JS (0) | 2022.11.10 |
TIL : ๋ฌธ์ฅ ๋ด ์ํ๋ฒณ ์ต๋ ๋น๋์ ๊ตฌํ๊ธฐ (1) | 2022.11.09 |
TIL : ํ์ด์ฌ ๋ฌธ๋ฒ, JS ๋๋ง์๊ธฐ ๊ฒ์ (0) | 2022.11.08 |
Comment