๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ–ฅ CS

(30)
[Algorithm/Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค(Lv.1) - [1์ฐจ] ๋‹คํŠธ๊ฒŒ์ž„ ์•ˆ๋…•ํ•˜์„ธ์š” ์ œ์ธ์ž…๋‹ˆ๋‹ค!! 2018 KAKAO BLIND RECRUITMENT ๋ฌธ์ œ๋กœ ์ถœ์ œ๋˜์—ˆ๋˜ ๋‹คํŠธ๊ฒŒ์ž„ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ดค๋Š”๋ฐ์š”, ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ธฐ์ค€ Level1 ๋ฌธ์ œ์ด์ง€๋งŒ ์ €๋Š” ์ ‘๊ทผํ•˜๋Š”๋ฐ ๊ฝค๋‚˜ ์˜ค๋ž˜๊ฑธ๋ ธ๊ธฐ ๋•Œ๋ฌธ์—.. ์–ด๋–ป๊ฒŒ ํ’€์—ˆ๋Š”์ง€ ๋ณต๊ธฐํ•˜๋ฉฐ ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!! ๋ฌธ์ œ ๋งํฌ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”. programmers.co.kr ๋ฌธ์ œ ์„ค๋ช… ์นด์นด์˜คํ†ก ๊ฒŒ์ž„๋ณ„์˜ ํ•˜๋ฐ˜๊ธฐ ์‹ ๊ทœ ์„œ๋น„์Šค๋กœ ๋‹คํŠธ ๊ฒŒ์ž„์„ ์ถœ์‹œํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋‹คํŠธ ๊ฒŒ์ž„์€ ๋‹คํŠธํŒ์— ๋‹คํŠธ๋ฅผ ์„ธ ์ฐจ๋ก€ ๋˜์ ธ ๊ทธ ์ ์ˆ˜์˜ ํ•ฉ๊ณ„๋กœ ์‹ค๋ ฅ์„ ๊ฒจ๋ฃจ๋Š” ๊ฒŒ์ž„์œผ๋กœ, ๋ชจ๋‘๊ฐ€ ๊ฐ„๋‹จํžˆ ์ฆ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ“ ์ž…์‚ฌํ•œ ๋ฌด์ง€๋Š” ์ฝ”๋”ฉ ์‹ค๋ ฅ์„ ์ธ์ •๋ฐ›์•„ ๊ฒŒ์ž„์˜..
[Algorithm/Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค(Lv.1) - ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ์•ˆ๋…•ํ•˜์„ธ์š” ์ œ์ธ์ž…๋‹ˆ๋‹ค!! ์˜ค๋Š˜์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๊ฐ€ ์•Œ๊ฒŒ๋œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜, ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ธฐ๋กํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค! ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ๋ฌธ์ œ๋Š” ๋ ˆ๋ฒจ1์˜ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์ด์ง€๋งŒ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜, ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ณต์‹(?)๊ณผ ๊ฐ™์€ ๊ฐœ๋…์„ ์•Œ๊ณ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ฌธ์ œ๋“ค์—์„œ์˜ ์‘์šฉ์— ๋Œ€๋น„ํ•ด ์ •๋ฆฌํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!! ๋ฌธ์ œ ๋งํฌ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”. programmers.co.kr ๋ฌธ์ œ ์„ค๋ช… ๋‘ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•ด ๋ณด์„ธ์š”. ๋ฐฐ์—ด์˜ ๋งจ ์•ž์— ์ตœ..
[Algorithm/Swift] BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰) Swift๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ ์•ˆ๋…•ํ•˜์„ธ์š” ์ œ์ธ์ž…๋‹ˆ๋‹ค:) ์˜ค๋Š˜์€ ์ €๋ฒˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํฌ์ŠคํŒ…(DFS)์— ์ด์–ด BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค! ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—, ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜์ธ BFS๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ์šฐ์„  ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•œ ์ดํ•ด๋ถ€ํ„ฐ ํ•„์š”ํ•˜๋‹ˆ ํ˜น์‹œ ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด์‹ ๋‹ค๋ฉด ์•„๋ž˜ ๋งํฌ๋กœ ๊ฑธ์–ด๋‘” ์ด์ „ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด์ฃผ์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!! [Algorithm/Swift] DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰) Swift๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ ์š”์ฆ˜ ๋ผ๋Š” ์ฑ…์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…๋“ค์„ ํ•˜๋‚˜์”ฉ ๋ฟŒ์ˆ˜๊ณ  ์žˆ๋Š”๋ฐ์š”, ์ด ์ฑ…์ด ํŒŒ์ด์ฌ ์–ธ์–ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…๋˜์–ด์žˆ์–ด์„œ ๊ฐœ๋…์„ ํ•™์Šตํ•˜๊ณ , ์˜ˆ์ œ๋‚˜ ์‹ค์ „ ๋ฌธ์ œ๋“ค์„ Swift์–ธ์–ด๋กœ ํ’€์ดํ•ด๋ณด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฐจ๊ทผ janechoi.tistory.com BFS BFS(Breadth First Search)๋Š” '๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰'์ด๋ผ๋Š” ์˜๋ฏธ..
[Algorithm/Swift] DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰) Swift๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ ์š”์ฆ˜ ๋ผ๋Š” ์ฑ…์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…๋“ค์„ ํ•˜๋‚˜์”ฉ ๋ฟŒ์ˆ˜๊ณ  ์žˆ๋Š”๋ฐ์š”, ์ด ์ฑ…์ด ํŒŒ์ด์ฌ ์–ธ์–ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…๋˜์–ด์žˆ์–ด์„œ ๊ฐœ๋…์„ ํ•™์Šตํ•˜๊ณ , ์˜ˆ์ œ๋‚˜ ์‹ค์ „ ๋ฌธ์ œ๋“ค์„ Swift์–ธ์–ด๋กœ ํ’€์ดํ•ด๋ณด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ณต๋ถ€ํ•ด๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ๊ฐœ๋…์„ ๊ณต๋ถ€ํ•˜๊ณ  Swift ์–ธ์–ด๋กœ ๋ฐ”๊ฟ”๋ณด๋Š” ๊ณผ์ •์„ ์ •๋ฆฌํ•ด๋‘๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ํ•˜๋‚˜์”ฉ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค! ์˜ค๋Š˜์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋…๋“ค ์ค‘ ํ•˜๋‚˜์ธ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๊ทธ ์ค‘์—์„œ๋„ DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)์˜ ๊ฐœ๋…์„ ์ •๋ฆฌํ•ด๋ณด๊ณ , ์ฑ…์˜ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ Swift ์–ธ์–ด๋กœ ๋ฐ”๊ฟ”์„œ DFS๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! DFS DFS(Depth-First Search)๋Š” ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋ฉฐ, ๊ทธ๋ž˜ํ”„์—์„œ ๊นŠ์€ ๋ถ€๋ถ„์„ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, ๊ทธ๋ž˜ํ”„๋Š” ์–ด๋–ค ๊ตฌ์กฐ์ธ์ง€ ๋ถ€ํ„ฐ ์•Œ์•„์•ผ ..
[๋„คํŠธ์›Œํฌ] ์ธํ„ฐ๋„ท์ด๋ž€? ๋ณธ ๊ฒŒ์‹œ๊ธ€์€ KOCW ์ดํ™”์—ฌ์ž๋Œ€ํ•™๊ต ์ด๋ฏธ์ • ๊ต์ˆ˜๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ๊ฒŒ์‹œ๊ธ€์— ํฌํ•จ๋˜๋Š” ์ด๋ฏธ์ง€ ์ž๋ฃŒ ๋˜ํ•œ ํ•ด๋‹น ๊ฐ•์˜์— ํฌํ•จ๋œ ๊ฐ•์˜ ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท์ด๋ž€? ์ธํ„ฐ๋„ท์˜ ๊ตฌ์„ฑ์š”์†Œ ์ธํ„ฐ๋„ท์˜ ๊ฐ€์žฅ์ž๋ฆฌ์—๋Š” ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ์™€ ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ host ํ˜น์€ end system์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ์—์„œ ์ปดํ“จํ„ฐ๋ฅผ ์ปดํ“จํ„ฐ๋ผ ๋ถ€๋ฅด์ง€ ์•Š๊ณ  host ํ˜น์€ end system์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์ด์œ ๋Š” ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ์—์„œ application program์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค์‹œ ๋งํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ˜ธ์ŠคํŒ…ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ฉฐ ๋„คํŠธ์›Œํฌ์˜ ๊ฐ€์žฅ์ž๋ฆฌ(end)์— ์œ„์น˜ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ์˜ ์ค‘์•™๋ถ€์—๋Š” ๋ผ์šฐํ„ฐ ๋˜๋Š” ์Šค์œ„์น˜๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ํŠน์ˆ˜ํ•œ ์žฅ๋น„๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ์šฐํ„ฐ๋Š” ์‚ฌ์šฉ์ž์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ชฉ์ ์ง€๋ฅผ ์ฐพ์•„๊ฐ€๋„๋ก ํ•˜๋Š” ์—ญ..
[Swift] DI(์˜์กด์„ฑ ์ฃผ์ž…) in Swift ์˜์กด์„ฑ(Dependency) ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์˜์กด์„ฑ(Dependency)์€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด ์‚ฌ์ด์— ์˜์กด ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์˜์กดํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ์ˆ˜์ •๋˜๋ฉด, ๋‹ค๋ฅธ ๊ฐ์ฒด๋„ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋กœ ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ด…์‹œ๋‹ค. struct Coffee { func drink() { print("์ปคํ”ผ๋ฅผ ๋งˆ์‹ ๋‹ค") } } struct Programmer { private let coffee = Coffee() func startProgramming() { self.coffee.drink() } } Programmer๊ฐ์ฒด๋Š” Coffee๊ฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šค๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, Programmer๊ฐ์ฒด์˜ startProgramming()์ด ํ˜ธ์ถœ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Coffee ๊ตฌ์กฐ์ฒด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ P..