๐ฅ CS (30) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.3) - ์ ๊ตญ์ฌ์ฌ ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค! ์์ฆ์ ํ๋ก๊ทธ๋๋จธ์ค์ ๋ฌธ์ ๋ค์ ๊พธ์คํ ํ๋ฉด์ ์ทจ์ฝํ ์ ํ์ ๋ฌธ์ ๋ค์ ํ๋ก๊ทธ๋๋จธ์ค, ๋ฐฑ์ค์์ ๋ ์ฐพ์์ ์ฐ์ตํด๋ณด๋ ๋ฐฉ์์ผ๋ก PS ์ค๋ ฅ์ ๊พธ์คํ ํฅ์์ํค๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์๋๋ฐ์, ์ค๋์ ์ ๋ฒ์ ๋ฌธ์ ๋ฅผ ํตํด ์ด๋ถํ์ ๋ฌธ์ ๋ฅผ ์ฒ์ ์ ํ๊ณ , ๋ ์ฐ์ตํด๋ณด๊ณ ์ถ์ด์ ํ๋ก๊ทธ๋๋จธ์ค์์ ์ด๋ถํ์ ์ฐ์ต๋ฌธ์ ๋ฅผ ์ฐพ์์ ํ์ด๋ดค์ต๋๋ค! ํ๋ค๋ณด๋ ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ ๋ฌธ์ ์ ๋น์ทํ ์ ์ด ๋ง์ ๊ฒ ๊ฐ์์ ์ด๋ถํ์ ๋ฌธ์ ๋ฅผ ์ ํ์ ๋ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ธฐ๋กํด๋๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ๊ฐ์ ธ์๋ดค์ต๋๋ค :) ๋ฌธ์ ๋งํฌ ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์. programmers.co.kr ๋ฌธ์ ํ์ด ์ผ๋จ.. [Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.2) - ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ ์ฐพ๊ธฐ ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค! PS..๋ฅผ ๋ค๊ณ ์์ต๋๋ค....ํผ์ ํด๊ฒฐ๋ชปํ ๋ฌธ์ ๊ฐ ๋ ์๊ธด ๊ฒ์ด์ฃ ..์.. PS ์ค๋ ฅ์ด ์ ์ด๋ ๊ฒ ์๋๊น์....์ข ๋ ๋ง์ ๋ฌธ์ ๋ฅผ ํ์ด๋ด์ผ๊ฒ ์ด์.. ๋ฌธ์ ๋งํฌ ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์. programmers.co.kr ๋ฌธ์ ํ์ด ์ผ๋จ ์ด ๋ฌธ์ ๋ DP(Dynamic Programming) ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด ํ์ด์ผํ๋ ๋ฌธ์ ์์ต๋๋ค. 1915๋ฒ: ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ ์ฒซ์งธ ์ค์ n, m(1 ≤ n, m ≤ 1,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ n๊ฐ์ ์ค์๋ m๊ฐ์ ์ซ์๋ก ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ค. www.acmicpc.net ํ๋ก๊ทธ๋๋จธ์ค์ ์ฐ์ต๋ฌธ์ ๋ผ ๋ฐฑ์ค์๋ ๋์ผํ.. [Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.3) - ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค:) PS๋ก ํ๋ฃจ๋ฅผ ํ์ฐจ๊ฒ ์์ํ๋ ค๊ณ ํ๋๋ฐ ์ด์ ํ ์ผ์ ์ข ํ๊ณ ๋ฌธ์ ๋ฅผ ํ์ด์ผ๊ฒ ์ด์...ใ maxElement { max = maxElement } pointer1 += 1 pointer2 += 1 } return max } ์ฒ์์๋ ํฌ ํฌ์ธํฐ๋ฅผ ํ์ฉํด ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ๊ธฐ๋ฒ์ผ๋ก k๊ฐ์ ๋๋ค๋์ ํ ๊ตฌ๊ฐ์ผ๋ก ์ค์ ํด์ ์ ์ฒด๋ฅผ ์ค์บํ๋ ๋ฐฉ์์ผ๋ก ํ์์ต๋๋ค. ์๋ํ๋ฉด, ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๋ ์ด์ ๊ฑด๋์ง ๋ชปํ๊ฒ ๋๋ ์๊ฐ์ ์ ํ ์ซ์๊ฐ 0์ด ๋๋ ๋๋ค๋์ด k๊ฐ ์ฐ๋ฌ์ ๋์ค๋ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ ๊ธธ์ด๊ฐ k์ธ ๊ตฌ๊ฐ ์์์์ ์ต๋๊ฐ์ด ํด๋น ๊ตฌ๊ฐ์ ๊ฑด๋ ์ ์๋ ์ฌ๋์ ์ต๋ ์ซ์๋ผ๋ ๊ฒ์ ํ์ ํ๊ณ , ํญ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋์ ๋ฐ์์ผ ํ๋ฏ๋ก ํ ์ฌ๋์ด ๊ฑด๋ ๋๋ง๋ค ์ ์ฒด ๋์ ์ซ์๊ฐ 1์ฉ ๊ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ ์ฒด ๋ค๋ฆฌ.. [Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.3) - ๊ธฐ์ง๊ตญ ์ค์น ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค:) ๊ฝค๋ ์ค๋๋ง์ด์ฃ ..? ์ธ๊ฐ์ด ์ค์ผ ๊ฒ์ผ๋ฅผ๊น์ ์ค๋๋ง์ ํฐ์คํ ๋ฆฌ๋ฅผ ๋ค์ด์๋๋ ํผ๋์ ์ ๊ธ์ด ์์ฒญ ๋ง๋ค์.. ๋ค๋ค ๊พธ์คํ ๊ธฐ๋ก ๋๋จํด..๋ณธ๋ฐ๊ฒ ์ต๋๋ค.. ๋๋ถ์ ์ ๋ ์๊ทน๋ฐ๊ณ ๋ค์ ์ด์ฌํ ํฐ์คํ ๋ฆฌ ๊ธ์ ์ด์ฌํ ์ช๋ณด๋ ค๊ณ ํฉ๋๋ค!!!! ์ค๋์ PS ๊ธฐ๋ก์ ๋จ๊ฒจ๋ณด๋ ค๊ณ ํ๋๋ฐ ๊ฐ์๊ธฐ Lv3..? ํฐ์คํ ๋ฆฌ์ ํ์ด๊ธฐ๋ก์ ์ํ์ง๋ง.. ๋จธ ํ๋ค๋ณด๋ ๋ ๋ฒจ3๊น์ง ์๋ค์? ๋ ๋ฒจ3 ๋ฌธ์ ๋ฅผ ํ๋ค๋ณด๋ ํ์คํ ํน์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ผํ๊ฑฐ๋, ํจ์จ์ฑ๊น์ง ๊ณ ๋ คํด์ผํ๋ ๋ฌธ์ ๊ฐ ๋ง์์ ๊ธฐ๋ก์ ํ์์ฑ์ ๋๊ผ์ต๋๋ค. ๊ทธ๋์ ์์ผ๋ก ๋ฌธ์ ํ์ด๊ณผ์ ์์ ์๋ก ์๊ฒ ๋๋ ์ข์ ์ ๊ทผ ๋ฐฉ๋ฒ์ด๋ ํ์ด ๋ฐฉ๋ฒ๋ค์ ๊ธ๋ก ๋จ๊ฒจ๋ณด๋ ค๊ณ ํฉ๋๋ค! ์ ์ PS ํจ์จ์ฑ์ ์ํด ๋ฌธ์ ์ ๋ํ ์ค๋ช ์ ์๋ตํ๊ณ ์ ๊ทผ ๋ฐ ํ์ด ์์ฃผ๋ก ๊ธฐ๋กํด๋๊ฐ๋๋ก ํ ๊ฒ์๐๐.. [์ด์์ฒด์ ] CPU ์ค์ผ์ค๋ง ๋ณธ ๊ฒ์๊ธ์ KOCW ์ดํ์ฌ์๋ํ๊ต ๋ฐํจ๊ฒฝ ๊ต์๋์ ๊ฐ์๋ฅผ ๋ฃ๊ณ , ์ฑ ์ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ๊ฒ์๊ธ์ ํฌํจ๋๋ ์ด๋ฏธ์ง ์๋ฃ๋ ๊ฐ์์ ํฌํจ๋ ๊ฐ์ ์๋ฃ์ ๋๋ค. CPU ์ค์ผ์ค๋ง์ด๋? ๋ชจ๋ ํ๋ก์ธ์ค๋ CPU๋ฅผ ํ์๋ก ํ๊ณ , ๋จผ์ CPU๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ด ํฉ๋๋ค. ์ด๋ฌํ ํ๋ก์ธ์ค๋ค์๊ฒ ๊ณต์ ํ๊ณ ํฉ๋ฆฌ์ ์ผ๋ก CPU ์์์ ํ ๋นํ๊ธฐ ์ํด ์ด์์ฒด์ ๋ ์ด๋ค ํ๋ก์ธ์ค์ CPU๋ฅผ ํ ๋นํ ์ง, ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ด๋ ๊ฒ ์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค๋ค์๊ฒ ๊ณต์ ํ๊ณ ํฉ๋ฆฌ์ ์ผ๋ก CPU ์์์ ๋ฐฐ๋ถํ๋ ๊ฒ์ CPU ์ค์ผ์ค๋ง(CPU Scheduling)์ด๋ผ๊ณ ํฉ๋๋ค. ํ๋ก๊ทธ๋จ์ ์คํ ๋จ๊ณ (CPU and I/O Bursts) ํฉ๋ฆฌ์ ์ด๊ณ ํจ์จ์ ์ธ CPU ์์ ๋ฐฐ๋ถ์ ์ํด ์ด๋ค ํ๋ก์ธ์ค์๊ฒ CPU๋ฅผ ๋จผ์ ํ ๋นํ๋ ๊ฒ์ด.. [์ด์์ฒด์ ] ์ค๋ ๋ (Thread) ๋ณธ ๊ฒ์๊ธ์ KOCW ์ดํ์ฌ์๋ํ๊ต ๋ฐํจ๊ฒฝ ๊ต์๋์ ๊ฐ์๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ๊ฒ์๊ธ์ ํฌํจ๋๋ ์ด๋ฏธ์ง ์๋ฃ๋ ๊ฐ์์ ํฌํจ๋ ๊ฐ์ ์๋ฃ์ ๋๋ค. ์ค๋ ๋(Thread) ์ค๋ ๋๋ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ฑํ๋ ์คํ ๋จ์์ ๋๋ค. (lightweight process๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค) ํ๋์ ํ๋ก์ธ์ค๋ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ(์ต์ ํ๋๋ ๊ฐ์ง), ์ค๋ ๋๋ฅผ ์ด์ฉํ๋ฉด ํ๋์ ํ๋ก์ธ์ค์์ ์ฌ๋ฌ ๋ถ๋ถ์ ๋์์ ์คํํ ์ ์์ต๋๋ค. ์ค๋ ๋์ ๊ตฌ์ฑ Thread์ ๊ตฌ์ฑ: CPU ์ํ๊ณผ ๊ด๋ จ๋ ์ ๋ณด(๊ณต์ ํ์ง ์๋ ๋ถ๋ถ) Program Counter Register set Stack space Thread๊ฐ ๊ณต์ ํ๋ ์์ญ (= task) ๋ฉ๋ชจ๋ฆฌ ๋ด Code, Data ์์ญ (= ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ณต๊ฐ) OS resources .. [์ด์์ฒด์ ] ํ๋ก์ธ์ค ๊ด๋ฆฌ ๋ณธ ๊ฒ์๊ธ์ KOCW ์ดํ์ฌ์๋ํ๊ต ๋ฐํจ๊ฒฝ ๊ต์๋์ ๊ฐ์๋ฅผ ๋ฃ๊ณ , ์ฑ ์ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ๊ฒ์๊ธ์ ํฌํจ๋๋ ์ด๋ฏธ์ง ์๋ฃ๋ ๊ฐ์์ ํฌํจ๋ ๊ฐ์ ์๋ฃ์ ๋๋ค. ํ๋ก์ธ์ค ๊ณ์ธต๊ตฌ์กฐ ํ๋ก์ธ์ค๋ ์คํ ๋์ค ์์คํ ํธ์ถ์ ํตํด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ ์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ํ๋ก์ธ์ค๋ฅผ ๋ถ๋ชจ ํ๋ก์ธ์ค(parent process), ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์ํด ์์ฑ๋ ํ๋ก์ธ์ค๋ฅผ ์์ ํ๋ก์ธ์ค(child process)๋ผ๊ณ ํฉ๋๋ค. ๋ถ๋ชจ ํ๋ก์ธ์ค๋ก๋ถํฐ ์์ฑ๋ ์์ ํ๋ก์ธ์ค๋ ์คํ ๊ณผ์ ์์ ๋ ๋ค๋ฅธ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ์ ์๊ณ , ๊ทธ ์์ ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ง์ ์ด์์ฒด์ ๋ ์ด์ฒ๋ผ ํ๋ก์ธ์ค๊ฐ ํ๋ก์ธ์ค๋ฅผ ๋ณ๋ ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ(= ํธ๋ฆฌ ๊ตฌ์กฐ)๋ก์จ ํ๋ก์ธ์ค๋ค์ ๊ด๋ฆฌํฉ๋๋ค. ํ๋ก์ธ์ค .. [์ด์์ฒด์ ] ํ๋ก์ธ์ค ์ํ ๋ณธ ๊ฒ์๊ธ์ KOCW ์ดํ์ฌ์๋ํ๊ต ๋ฐํจ๊ฒฝ ๊ต์๋์ ๊ฐ์๋ฅผ ๋ฃ๊ณ , ์ฑ ์ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ๊ฒ์๊ธ์ ํฌํจ๋๋ ์ด๋ฏธ์ง ์๋ฃ๋ ๊ฐ์์ ํฌํจ๋ ๊ฐ์ ์๋ฃ์ ๋๋ค. ํ๋ก์ธ์ค์ ์ํ ํ๋์ ์ปดํจํฐ์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ค์ด ๋น ๋ฅด๊ฒ ๋ฒ๊ฐ์ ๊ฐ๋ฉด์ ์คํ๋๋ ๊ณผ์ ์์ ํ๋์ ํ๋ก์ธ์ค๋ ์ฌ๋ฌ ์ํ๋ฅผ ๊ฑฐ์น๋ฉฐ ์คํ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ์ฒด์ ๋ ํ๋ก์ธ์ค์ ์ํ๋ฅผ PCB๋ฅผ ํตํด ์ธ์ํ๊ณ ๊ด๋ฆฌํฉ๋๋ค. ํ๋ก์ธ์ค๊ฐ ๊ฐ์ง ์ ์๋ ๋ํ์ ์ธ ์ํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. 1. ์์ฑ ์ํ - new ํ๋ก์ธ์ค๊ฐ ์์ฑ ์ค์ธ ์ํ๋ฅผ ์์ฑ ์ํ(new) ๋ผ๊ณ ํฉ๋๋ค. 2. ์คํ ์ํ - running CPU๋ฅผ ํ ๋น ๋ฐ์ ์คํ ์ค(= instruction์ ์ํ ์ค)์ธ ์ํ๋ฅผ ์คํ ์ํ(running)๋ผ๊ณ ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ ์ปดํจํฐ๋ C.. ์ด์ 1 2 3 4 ๋ค์