๐ฅ CS (30) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.2) - ํ๋ฐฐ ๋ฐฐ๋ฌ๊ณผ ์๊ฑฐํ๊ธฐ ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค :) ์์ฆ PS๋ฅผ ์ฐ์ตํ๋ฉฐ ์์ด๋์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๋ ๋ฅ๋ ฅ์ด ๋ถ์กฑํ๋ค๋ ๊ฒ์ ๊นจ๋ซ๊ณ ์๋๋ฐ์,,, ์ฐจ๊ทผ์ฐจ๊ทผ ๊ธฐ๋ก๋ ํด๊ฐ๋ฉฐ ์ค๋ ฅ์ ๋์ฌ๊ฐ์ผ๊ฒ ์ต๋๋ค..!! Greedy ์ ํ์ธ 2023 KAKAO BLIND RECRUITMENT - ํ๋ฐฐ ๋ฐฐ๋ฌ๊ณผ ์๊ฑฐํ๊ธฐ ๋ฌธ์ ํ์ด๋ฅผ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค๐ ๋ฌธ์ ๋งํฌ ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์. programmers.co.kr ๋ฌธ์ ํ์ด ์ฒ์ ์ ๊ทผ ์ผ๋จ ๋ฌธ์ ๋ฅผ ์ฝ๊ณ ๊ทธ๋ฆฌ๋๋ก ํ์ด์ผ๊ฒ ๋ค๋ ์์ด๋์ด๋ ๋ ์ฌ๋๋๋ฐ, ์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ์ง ๋ชปํด ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ๋ฐ ์กฐ๊ฑด์ ํ๋จํด์ฃผ๊ธฐ๊ฐ ๊น๋ค๋กญ๋ค๊ณ ๋๊ผ์ต๋๋ค๐ฅฒ (ํ๋ฐฐ ์๊ฑฐ .. [Algorithm/Swift] BOJ(๊ณจ๋4) - 2573 ๋น์ฐ ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค :) PS ๊ธ์ ์ค๋๋ง์ธ ๊ฒ ๊ฐ์๋ฐ.. ์ค๋์ ๋ฐฑ์ค ๋ฌธ์ ์ค ํ๋๋ฅผ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค! BFS ๋ฌธ์ ์ธ๋ฐ ํ๋ฒ ๋ ์๊ฐํด์ผ ๋ ๋ถ๋ถ์ด ์๋ ๋ฌธ์ ์ฌ์ ์ ๋ฆฌํด๋๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ์ฒ์์ผ๋ก ๋ฐฑ์ค ๋ฌธ์ ๋ฅผ ๊ฐ์ ธ์๋ดค์ต๋๋ค. ๋ฐ๋ก ์์ํ๊ฒ ์ต๋๋ค ! ๋ฌธ์ ๋งํฌ 2573๋ฒ: ๋น์ฐ ์ฒซ ์ค์๋ ์ด์ฐจ์ ๋ฐฐ์ด์ ํ์ ๊ฐ์์ ์ด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ๋ ์ ์ N๊ณผ M์ด ํ ๊ฐ์ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. N๊ณผ M์ 3 ์ด์ 300 ์ดํ์ด๋ค. ๊ทธ ๋ค์ N๊ฐ์ ์ค์๋ ๊ฐ ์ค๋ง๋ค ๋ฐฐ์ด์ ๊ฐ ํ์ www.acmicpc.net ๋ฌธ์ ํ์ด ๊ฐ๋จํ๊ฒ ๋ฌธ์ ์๊ตฌ ์ฌํญ์ ์ ๋ฆฌํด๋ณด์๋ฉด, 2์ฐจ์ ๋ฐฐ์ด์ ๋น์ฐ์ ๊ฐ ๋ถ๋ถ๋ณ ๋์ด ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋๋ฐ, ์ธ์ ํ ์นธ์ด 0์ผ ๊ฒฝ์ฐ(๊ทธ๋ฆผ์์ ๋น์นธ), ๋น์ฐ์ด ์ผ๋ ๋ง๋ค ๊ทธ ์นธ์ ์ธ์ ํ ๋น์นธ์ ๊ฐ.. [Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.3) - ํ ํธ์ง ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค :) ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ํ์ฉํ๋ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๊ฒ ๋์ด ํด๋น ๋ด์ฉ์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋๋ฐ์, ๋ฌธ์ ๋ฅผ ํ์ดํ๋ฉฐ ์ฐ๊ฒฐ๋ฆฌ์คํธ(LinkedList)๋ฅผ Swift๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค! ๋ฌธ์ ๋งํฌ ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์. programmers.co.kr ๋ฌธ์ ํ์ด ์ฒ์ ์ ๊ทผ ์ ๋ ์ฒ์๋ถํฐ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์จ์ผ๊ฒ ๋ค๋ ์์ด๋์ด๋ฅผ ๋ ์ฌ๋ฆฌ์ง ๋ชปํด ํ ๋ฒ์ ๋ง์ถ์ง ๋ชปํ์ต๋๋ค,, ์ ํ๋ ํ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๋๊ณ ๋ช ๋ น์ด ์ผ์ด์ค์ ๋ฐ๋ผ ์๋ง์ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋๋ก(ํฌ์ธํฐ ์ด๋, ์ญ์ ๋ ํ ์ธ๋ฑ์ค ๊ธฐ๋ก ๋ฑ) ํฌ์ธํฐ๋ฅผ ์ด์ฉํด ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ.. [Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.3) - ํ๊ดด๋์ง ์์ ๊ฑด๋ฌผ ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค :) ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ ๋์ ํฉ์ ์ด์ฉํด ๊ตฌ๊ฐ์ ๋ณํ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์๋ก ์๊ฒ ๋์ด ๋ฌธ์ ํ์ด์ ํจ๊ป ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ฌธ์ ํ์ด๋ฅผ ํตํด ๋์ ํฉ์ ๋ํด ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค. ๋ฌธ์ ๋งํฌ ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์. programmers.co.kr ๋ฌธ์ ํ์ด ์ฒ์ ์ ๊ทผ ํด๋น ๋ฌธ์ ๋ ์ ๊ตฐ์ด ํน์ ๊ฑด๋ฌผ๋ค์ ๊ณต๊ฒฉํ๊ณ ์๊ตฐ์ด ํ๋ณตํ๋ ๊ณผ์ ์ ๊ฑฐ์ณ ์ต์ข ์ ์ผ๋ก ํ๊ดด๋์ง ์์ ๊ฑด๋ฌผ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ 2์ฐจ์ ๋ฐฐ์ด ์์์ ๊ฐ์ ๋ณํ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๊ด๊ฑด์ ๋๋ค! (ํจ์จ์ฑ ํ ์คํธ ์กด์ฌ) ์ ๋ ํจ์จ์ ์ธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์.. [์ด์์ฒด์ ] ๊ต์ฐฉ ์ํ (Deadlock) ๋ณธ ๊ฒ์๊ธ์ KOCW ์ดํ์ฌ์๋ํ๊ต ๋ฐํจ๊ฒฝ ๊ต์๋์ ๊ฐ์๋ฅผ ๋ฃ๊ณ , ์ฑ ์ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ๊ฒ์๊ธ์ ํฌํจ๋๋ ์ด๋ฏธ์ง ์๋ฃ๋ ๊ฐ์์ ํฌํจ๋ ๊ฐ์ ์๋ฃ์ ๋๋ค. ๊ต์ฐฉ ์ํ(Deadlock)๋? ์ผ๋ จ์ ํ๋ก์ธ์ค๋ค์ด ์๋ก๊ฐ ๊ฐ์ง ์์(resource)์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ block๋ ์ํ๋ฅผ ๊ต์ฐฉ์ํ(deadlock)์ด๋ผ๊ณ ํฉ๋๋ค. ์์(resource) ํ๋์จ์ด, ์ํํธ์จ์ด ๋ฑ์ ํฌํจํ๋ ๊ฐ๋ ex) I/O device, CPU cycle, memory space, semaphore ๋ฑ ํ๋ก์ธ์ค๊ฐ ์์์ ์ฌ์ฉํ๋ ์ ์ฐจ Request(์์ฒญ) -> Allocate(ํ๋) -> Use(์ฌ์ฉ) -> Release(๋ฐ๋ฉ) Deadlock ๋ฐ์์ 4๊ฐ์ง ์กฐ๊ฑด ๊ต์ฐฉ ์ํ๊ฐ ๋ฐ์ํ ์กฐ๊ฑด์๋ ๋ค ๊ฐ์ง๊ฐ ์์ต๋๋ค. ๋ค ๊ฐ์ง ์กฐ๊ฑด .. [์ด์์ฒด์ ] ํ๋ก์ธ์ค ๋๊ธฐํ (2/2) ๋ณธ ๊ฒ์๊ธ์ KOCW ์ดํ์ฌ์๋ํ๊ต ๋ฐํจ๊ฒฝ ๊ต์๋์ ๊ฐ์๋ฅผ ๋ฃ๊ณ , ์ฑ ์ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ๊ฒ์๊ธ์ ํฌํจ๋๋ ์ด๋ฏธ์ง ์๋ฃ๋ ๊ฐ์์ ํฌํจ๋ ๊ฐ์ ์๋ฃ์ ๋๋ค. Synchronization๊ณผ ๊ด๋ จ๋ ๊ณ ์ ์ ์ธ ๋ฌธ์ Bounded-Buffer Problem (Producer-Consumer Problem) Readers and Writers Problem Dining-Philosophers Problem 1. Bounded-Buffer Problem(Producer-Consumer Problem) ์๋๋ฆฌ์ค ๋ ์ข ๋ฅ์ ํ๋ก์ธ์ค ์กด์ฌ 1. ์์ฐ์(producer) ํ๋ก์ธ์ค: ๋ฐ์ดํฐ ์์ฐํด์ ๊ณต์ ๋ฒํผ์ ๋ฃ์ 2. ์๋น์(consumer) ํ๋ก์ธ์ค: ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ์์ ๊บผ๋ด๊ฐ์ ์๋น ๋ฐ์ ๊ฐ๋ฅํ ๋ฌธ์ 1. lo.. [์ด์์ฒด์ ] ํ๋ก์ธ์ค ๋๊ธฐํ (1/2) ๋ณธ ๊ฒ์๊ธ์ KOCW ์ดํ์ฌ์๋ํ๊ต ๋ฐํจ๊ฒฝ ๊ต์๋์ ๊ฐ์๋ฅผ ๋ฃ๊ณ , ์ฑ ์ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ๊ฒ์๊ธ์ ํฌํจ๋๋ ์ด๋ฏธ์ง ์๋ฃ๋ ๊ฐ์์ ํฌํจ๋ ๊ฐ์ ์๋ฃ์ ๋๋ค. ๋ฐ์ดํฐ ์ ๊ทผ ํจํด ํ๋ก์ธ์ค ๋๊ธฐํ์ ๋ํด ์์๋ณด๊ธฐ์ ์์ ์ปดํจํฐ ์์คํ ๋ด์์ ๋ฐ์ดํฐ๊ฐ ์ ๊ทผ๋๋ ํจํด์ ๋ํด ๋จผ์ ์์๋ด ์๋ค. ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด์๋ ์์น์์ ์ฝ์ด์์ ์ฐ์ฐ์ ํ๊ณ ์์ ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๋ฐ์ดํฐ์ ๋ฐ์์ ํ๊ณ , ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ Storage Box๋ ๊ณต์ ๋๊ธฐ ๋๋ฌธ์ ๋๊ธฐํ(synchronization) ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ณต์ ๋ฐ์ดํฐ(shared data)์ ๋์ ์ ๊ทผ์ ๋ฐ์ดํฐ์ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ๋ฐ์์ํฌ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ(consistency) ์ ์ง๋ฅผ ์ํด์๋ ํ๋ ฅ ํ๋ก์ธ์ค ๊ฐ์ ์คํ ์์๋ฅผ ์ ํด์ฃผ๋ ๋ฉ์ปค.. [Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.3) - ์คํฐ์ปค ๋ชจ์ผ๊ธฐ(2) ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค! ์ค๋์ ๋ฌธ์ ํ์ด๋ฅผ ํตํด dp ์ ํ ํ์ด ๊ณผ์ ์ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ํด๋น ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋ํ์ ์ธ dp ์ ํ์ด๋ผ๊ณ ์๊ฐ์ด ๋ค์ด ์ ๋ฆฌํด๋๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ๊ฐ์ ธ์์ต๋๋ค! ๋ฌธ์ ๋งํฌ ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์. programmers.co.kr ๋ฌธ์ ํ์ด ์ฒ์ ์ ๊ทผ ์ ๋ ์ฒ์์ ํฌํฌ์ธํฐ๋ก ์ ๊ทผ์ ํ์๋๋ฐ์,, ๋ค๋ฅธ ํ์ด๋ฅผ ์ฐธ๊ณ ํด์ dp๋ก ํด๊ฒฐํ ํ ์๊ฐํด๋ณด๋๊น dp๋ก ํ ์ ๋ฐ์ ์๋ ๋ฌธ์ ๋ผ๋ ์๊ฐ์ด ๋๋ ๊ฒ ๊ฐ์ต๋๋ค..! ์ฒ์์ ํฌํฌ์ธํฐ๋ก ์ ๊ทผํ ์ด์ ๋ start, end ํฌ์ธํฐ ๋ชจ๋ 0์ ๋๊ณ ์์ํด์ ์ฒ์์ผ๋ก ๋ผ๋ ์คํฐ์ปค์ ์ธ๋ฑ์ค์ start.. ์ด์ 1 2 3 4 ๋ค์