๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming ๊ฐœ๋ฐœ/๐ŸŽ iOS ๊ฐœ๋ฐœ, Swift

[Swift][๋ฒˆ์—ญ] ์Šค์œ„ํ”„ํŠธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์„น์…˜ 1. ์†Œ๊ฐœ - ์ฑ•ํ„ฐ3. ์Šค์œ„ํ”„ํŠธ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Swift Standard Library

by kimdee 2022. 5. 14.
๋ฐ˜์‘ํ˜•

Raywenderlich.com ์—์„œ ๋‚˜์˜จ Data Structures & Algorithms in Swift ์ฑ…์˜ ๋ฐ๋ชจ ๊ณต๊ฐœ๋ณธ์„ ๋ฒˆ์—ญํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ฆ๊ฒ๊ฒŒ ๋ด์ฃผ์„ธ์š”. 

https://www.raywenderlich.com/books/data-structures-algorithms-in-swift

 


 

์„น์…˜ 1. ์†Œ๊ฐœ Introduction

์ฑ•ํ„ฐ3. ์Šค์œ„ํ”„ํŠธ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Swift Standard Library

์Šค์œ„ํ”„ํŠธ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์Šค์œ„ํ”„ํŠธ ์–ธ์–ด์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ด ์•ˆ์—๋Š” ์Šค์œ„ํ”„ํŠธ ์•ฑ์„ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํˆด๊ณผ ํƒ€์ž…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ์ž๋ฃŒ๊ตฌ์กฐ(your own custom data structure)๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์ „์—, ์Šค์œ„ํ”„ํŠธ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฒˆ ์ฑ•ํ„ฐ์—์„œ๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์„ธ๊ฐ€์ง€ ์ฃผ์š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ธ Array, Dictionary, Set ์— ์ค‘์ ์„ ๋‘˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 


 

๋ฐฐ์—ดArray

๋ฐฐ์—ด์€ ๋ฒ”์šฉ์˜ ์ผ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ •๋ ฌ๋œ ์š”์†Œ๋“ค์˜ ์ปฌ๋ ‰์…˜์„ ์ €์žฅํ•˜๋ฉฐ, ์Šค์œ„ํ”„ํŠธ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ผ, ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•œ ๊ฐ’๋“ค์˜ ๋ชฉ๋ก์ธ ๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด array literal ์„ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์˜ˆ๋ฅผ ํ™•์ธํ•ด๋ณด์„ธ์š”.

 

let people = ["Brian", "Stanley", "Ringo"]

์Šค์œ„ํ”„ํŠธ๋Š” ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์—ด์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ ํ”„๋กœํ† ์ฝœ์€ ๋ฐฐ์—ด์— ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฐ์—ดArray ์€ ์‹œํ€€์ŠคSequence ์ž…๋‹ˆ๋‹ค. ์ด ๋ง์€ ํ•œ๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐฐ์—ด์€ ์ฝœ๋ ‰์…˜Collection ์ž…๋‹ˆ๋‹ค. ์ด ๋œป์€ ๋น„ํŒŒ๊ดด์ ์œผ๋กœ(nondestructively) ์—ฌ๋Ÿฌ๋ฒˆ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๊ณ , ์ฒจ์ž ์—ฐ์‚ฐ์ž(subscript oerator)๋ฅผ ์ด์šฉํ•˜์—ฌ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด์€ ๋˜ํ•œ ํšจ์œจ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” RandomAccessCollection ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

์Šค์œ„ํ”„ํŠธ์˜ ๋ฐฐ์—ดArray์€ ์ œ๋„ค๋ฆญ ์ปฌ๋ ‰์…˜generic collection ์œผ๋กœ๋„ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ํƒ€์ž…์—์„œ๋„ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์Šค์œ„ํ”„ํŠธ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ œ๋„ค๋ฆญ ์ฝ”๋“œ๋กœ ๊ตฌ์ถ•๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ชจ๋“  ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—ฌ๋Ÿฌ๋ถ„์ด ์•Œ์•„์•ผ ํ•˜๋Š” ํŠน์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ๋ฒˆ์งธ๋Š” ๋ฐ”๋กœ ์ˆœ์„œorder ์˜ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

 

์ˆœ์„œ Order

๋ฐฐ์—ด์˜ ์š”์†Œ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ people ๋ฐฐ์—ด์„ ์˜ˆ์‹œ๋กœ ๋“ค์ž๋ฉด, "Brian" ์€ "Stanley" ์˜ ์•ž์— ์˜ต๋‹ˆ๋‹ค.

๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์€ ๋ชจ๋‘ 0 ๊ธฐ๋ฐ˜์˜ ์ •์ˆ˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด people ๋ฐฐ์—ด์€ 3๊ฐœ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ ์š”์†Œ์— ๋Œ€์‘๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ด์„œ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

people[0] // "Brian"
people[1] // "Stanley"
people[2] // "Ringo"

 

๋ฐฐ์—ด์˜ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์ˆœ์„œ๊ฐ€ ์ •์˜๋˜๋ฉฐ ์ด ๊ฐœ๋…์„ ๋‹น์—ฐํ•˜๊ฒŒ ์—ฌ๊ฒจ์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๋”•์…”๋„ˆ๋ฆฌ Dictionary ์™€ ๊ฐ™์€ ์ผ๋ถ€ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์ˆœ์„œ์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ์•ฝํ•ฉ๋‹ˆ๋‹ค.

 

๋žœ๋ค ์•ก์„ธ์ŠคRandom-access

๋žœ๋ค ์•ก์„ธ์ŠคRandom-access ๋Š” ์ •ํ•ด์ง„ ์‹œ๊ฐ„์— ์š”์†Œ๊ฒ€์ƒ‰์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒฝ์šฐ ๊ฑฐ๋ก ํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์„ฑ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด people ๋ฐฐ์—ด์—์„œ "Ringo" ๋ผ๋Š” ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ๋Š” ์ผ์ •ํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด์„œ ์ด ์„ฑ๋Šฅ์„ ๋‹น์—ฐํ•˜๊ฒŒ ์—ฌ๊ฒจ์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ linked list ๋‚˜ ํŠธ๋ฆฌ tree๋Š” ์ผ์ •ํ•œ ์‹œ๊ฐ„๋™์•ˆ ์ ‘๊ทผ(constant time access)ํ•˜๋Š” ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.

 

๋ฐฐ์—ด์˜ ์„ฑ๋Šฅ Array performance

๋žœ๋ค ์•ก์„ธ์Šค ์™ธ์—๋„ ๋‹ค๋ฅธ ์„ฑ๋Šฅ ์˜์—ญ๋“ค์€ ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ๊ฐœ๋ฐœ์ž๋กœ์„œ ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ์˜์—ญ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ๋‚˜ ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ์ฆ๊ฐ€ํ•  ๋•Œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ˜น์€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”์ง€ ๋ง์ž…๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ๋‘๊ฐ€์ง€ ์š”์ธ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

 

์‚ฝ์ž… ์œ„์น˜ Insertion location

์ฒซ๋ฒˆ์งธ ์š”์ธ์€, ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ๋ฐฐ์—ด ์–ด๋””์— ์‚ฝ์ž…ํ•  ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ๋ฐฐ์—ด ๊ฐ€์žฅ ๋’ค์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

people.append("Charles")
print(people) // prints ["Brian", "Stanley", "Ringo", "Charles"]

 

append ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ  "Charles" ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ๋์— ์œ„์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ƒ์ˆ˜์‹œ๊ฐ„ constant-time ์ž‘์—…์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐฐ์—ด์ด ์–ผ๋งˆ๋‚˜ ์ปค์ง€๋“  ์ƒ๊ด€์—†์ด ์ž‘์—…์ด ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ๋™์ผํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐฐ์—ด์˜ ํ•œ ์ค‘๊ฐ„๊ณผ ๊ฐ™์ด ํŠน์ • ์œ„์น˜์— ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•ด์•ผ๋  ๋•Œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด ์ผ€์ด์Šค๊ฐ€ ์™œ ์ƒ๊ธฐ๋Š”์ง€ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์˜ ์œ ์ถ”๋ฅผ ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค. ๊ทน์žฅ์—์„œ ์—ฌ๋Ÿฌ๋ถ„์€ ์ค„์„ ์„œ์„œ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ ์ƒˆ๋กœ์šด ์‚ฌ๋žŒ์ด ์™€์„œ ์ค„์„ ์„œ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ๊ฐ„ํŽธํ•œ ์œ„์น˜๊ฐ€ ์–ด๋”œ๊นŒ์š”? ๋‹น์—ฐํžˆ ๋ฐ”๋กœ ๋งˆ์ง€๋ง‰์ด์ฃ .

 

์ƒˆ๋กœ์˜จ ์‚ฌ๋žŒ์ด ์ค„์˜ ๊ฐ€์šด๋ฐ ๋ผ์–ด๋“ค๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, ๊ทธ ์ค„์— ์žˆ๋Š” ์‚ฌ๋žŒ ์ค‘ ์ ˆ๋ฐ˜์„ ์„ค๋“ํ•ด์„œ ๊ณต๊ฐ„์„ ๋งŒ๋“ค๋„๋ก ํ•ด์•ผํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ ๊ทธ ์ƒˆ๋กœ์˜จ ์‚ฌ๋žŒ์ด ๋งค์šฐ ๋ฌด๋ก€ํ•˜๋‹ค๋ฉด ์ค„์˜ ๋งจ ์•ž์— ๋ผ์–ด๋“ค๋ ค๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ค„์— ์„œ ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์ƒˆ๋กœ์˜จ ์‚ฌ๋žŒ์„ ์œ„ํ•œ ๋งจ ์•ž์ž๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋’ค๋กœ ์ด๋™ํ•ด์•ผํ•˜๋‹ˆ๊นŒ์š”.

 

์ด๊ฒŒ ๋ฐ”๋กœ ๋ฐฐ์—ด์ด ์ž‘๋™ํ•˜๋Š” ์›๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ๋์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๊ณณ์— ์‚ฝ์ž…ํ•œ๋‹ค๋ฉด ๊ธฐ์กด์˜ ์š”์†Œ๋“ค์˜ ์œ„์น˜๋ฅผ ๋’ค๋กœ ๊ต์ฒดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

people.insert("Andy", at: 0)
// ["Andy", "Brian", "Stanley", "Ringo", "Charles"]

 

์ •ํ™•ํ•˜๊ฒŒ ํ•˜์ž๋ฉด ๋ชจ๋“  ์š”์†Œ๋Š” ๋ฐ˜๋“œ์‹œ ์ธ๋ฑ์Šค ํ•˜๋‚˜๋งŒํผ ๋’ค๋กœ ์ด๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. n ๋ฒˆ์˜ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ๋‘๋ฐฐ๋ผ๋ฉด ์‚ฝ์ž… insert ์ž‘์—…์—๋Š” ๋‘๋ฐฐ์˜ ์‹œ๊ฐ„์ด ๋“ญ๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ ์š”์†Œ๋ฅผ ๋ฐฐ์—ด์— ๋งจ ์•ž์— ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์ด ์—ฌ๋Ÿฌ๋ถ„ ํ”„๋กœ๊ทธ๋žจ์˜ ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์ด๋ผ๋ฉด, ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ•ด๋ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์‚ฝ์ž…์˜ ์†๋„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋‘๋ฒˆ์งธ ์š”์†Œ๋Š” ๋ฐฐ์—ด์˜ ์šฉ๋Ÿ‰capacity ์ž…๋‹ˆ๋‹ค. ๋ณด์ด์ง„ ์•Š์ง€๋งŒ(underneath the hood) ์Šค์œ„ํ”„ํŠธ์˜ ๋ฐฐ์—ด์€ ์•ˆ์˜ ์š”์†Œ๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์„ ๋ฏธ๋ฆฌ ๊ฒฐ์ •ํ•˜์—ฌ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์ตœ๋Œ€ ์šฉ๋Ÿ‰์ธ ๋ฐฐ์—ด์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด ๋ฐฐ์—ด์€ ๋” ๋งŽ์€ ๊ณต๊ฐ„์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์žฌ๊ตฌ์กฐํ™” ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ๊ธฐ์กด ์š”์†Œ๋“ค์„ ๋ชจ๋‘ ๋ฉ”๋ชจ๋ฆฌ์ƒ์œผ๋กœ ๋” ํฐ ์ƒˆ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ์ ‘๊ทผํ•˜๊ณ  ๋ณต์‚ฌํ•˜๋Š” ๋น„์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

์–ด๋–ค ์‚ฝ์ž…์ด๋“ , ์‹ฌ์ง€์–ด ๋์— ์‚ฝ์ž…ํ•˜๋”๋ผ๋„, ์‚ฌ๋ณธ์ด ๋งŒ๋“ค์–ด์ง€๋Š” ์ˆœ๊ฐ„ n ๊ฐœ์˜ ๋‹จ๊ณ„๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ด ๋ณต์‚ฌ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ํ•„์š”ํ•œ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๋Š” ์ „๋žต์„ ์ฐจ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ๋ณต์‚ฌ๋ฅผ ํ–‰ํ•  ๋•Œ๋งˆ๋‹ค, ์šฉ๋Ÿ‰์€ ๋‘๋ฐฐ๋กœ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.

 


๋”•์…”๋„ˆ๋ฆฌ Dictionary

๋”•์…”๋„ˆ๋ฆฌ๋Š” ํ‚ค-๊ฐ’key-value ์˜ ์Œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์ œ๋„ค๋ฆญ ์ฝœ๋ ‰์…˜์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„๊ณผ ์Šค์ฝ”์–ด๋ฅผ ๋ณด์œ ํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

var scores: [String: Int] = ["Eric": 9, "Mark": 12, "Wayne": 1]

 

๋”•์…”๋„ˆ๋ฆฌ๋Š” ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๊ณ , ํŠน์ •ํ•œ ์ธ๋ฑ์Šค์— ์‚ฝ์ž…ํ•  ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ‚ค Key ํƒ€์ž…์ด ํ•ด์‹œ ๊ฐ€๋Šฅ Hashable ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ๋„ ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„์˜ ํ‘œ์ค€ ํƒ€์ž…์€ ํ•ด์‹œ๊ฐ€๋Šฅ Hashable ํ•˜๋ฉฐ, ์ตœ๊ทผ ๋ฒ„์ „์˜ ์Šค์œ„ํ”„ํŠธ์—์„œ Hashable ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ์€ ๋Œ€์ˆ˜๋กญ์ง€ ์•Š์€ ์ผ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ตฌ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๋”•์…”๋„ˆ๋ฆฌ์— ์ƒˆ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

scores["Andrew"] = 0

 

๋”•์…”๋„ˆ๋ฆฌ ๋‚ด์— ์ƒˆ๋กœ์šด ํ‚ค-๊ฐ’ ์Œ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

["Eric": 9, "Mark": 12, "Andrew": 0, "Wayne": 1]

 

"Andrew"  ํ‚ค๋Š” ๋”•์…”๋„ˆ๋ฆฌ์˜ ์–ด๋”˜๊ฐ€์— ์‚ฝ์ž…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”•์…”๋„ˆ๋ฆฌ๋Š” ์ˆœ์„œ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ƒˆ ํ•ญ๋ชฉ์ด ์–ด๋””์— ๋“ค์–ด๊ฐ€๋Š”์ง€ ๋ณด์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

Collection ํ”„๋กœํ† ์ฝœ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ๋”•์…”๋„ˆ๋ฆฌ์˜ ํ‚ค-๊ฐ’์„ ์—ฌ๋Ÿฌ๋ฒˆ ์ˆœํšŒํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ˆœํšŒ์˜ ์ˆœ์„œ๋Š” ์ง€์ •๋˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ, ์ฝœ๋ ‰์…˜์ด ๋ณ€๊ฒฝ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

 

๋ช…์‹œ์ ์ธ ์ˆœ์„œ๊ฐ€ ์—†๋‹ค๋Š” ๋‹จ์ ์€ ์ผ๋ถ€ ํŠน์„ฑ[redeeming traints]์ด ํ•จ๊ป˜ ๋”ฐ๋ผ๊ฐ‘๋‹ˆ๋‹ค.

 

๋ฐฐ์—ด๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋”•์…”๋„ˆ๋ฆฌ๋Š” ์š”์†Œ๊ฐ€ ์„ž์ด๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”•์…”๋„ˆ๋ฆฌ์— ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์€ ํ•ญ์ƒ ์ผ์ •ํ•œ ์ƒ์ˆ˜์‹œ๊ฐ„์ด ๋“ญ๋‹ˆ๋‹ค.

์กฐํšŒ(Lookup)์ž‘์—…์—๋„ ๋˜‘๊ฐ™์ด ์ƒ์ˆ˜์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.์ด๋Š” ๋ฐฐ์—ด์—์„œ ํŠน์ • ์š”์†Œ๋ฅผ ์ฐพ์„ ๋•Œ ๋ฐฐ์—ด์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‚ฝ์ž… ์œ„์น˜๊นŒ์ง€ ๊ฐ€์•ผ๋˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ˜„์ €ํ•˜๊ฒŒ ๋น ๋ฆ…๋‹ˆ๋‹ค.

 


 

์„ธํŠธ Set

์„ธํŠธ๋Š” ๊ณ ์œ ํ•œ ๊ฐ’์„ ๊ฐ€์ง„ ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค. ์•„์ดํ…œ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์•„์ดํ…œ์€ ๊ฑฐ๋ถ€ํ•˜๋Š” ๊ฐ€๋ฐฉ์„ ๋– ์˜ฌ๋ ค๋ณด์„ธ์š”.

 

var bag: Set<String> = ["Candy", "Juice", "Gummy"]
bag.insert("Candy")
print(bag) // prints ["Candy", "Juice", "Gummy"]

 

์„ธํŠธ๋Š” ๊ณ ์œ ์„ฑ์„ ์ ์šฉํ•˜๋ฏ€๋กœ, ์ฝœ๋ ‰์…˜์— ์ค‘๋ณต๊ฐ’์„ ์ฐพ๋Š” ๋“ฑ, ๋‹ค์–‘ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

let values: [String] = [...]
var bag: Set<String> = []
for value in values {
  if bag.contains(value) {
    // bag already has it, therefore it is a duplicate
  }
  bag.insert(value)
}

 

๋”•์…”๋„ˆ๋ฆฌ๋‚˜ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์„ธํŠธ๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋„๊ตฌํ•จ[toolbelt]์— ๋ณด๊ด€ํ•ด์•ผํ•˜๋Š” ์ค‘์š”ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋ ๋งŒํผ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•œ ๊ฐ€์ง€ ์œ ์˜์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”•์…”๋„ˆ๋ฆฌ์™€ ์œ ์‚ฌํ•˜๊ฒŒ, ์„ธํŠธ์˜ ๊ฐ’๋“ค์€ ์ˆœ์„œ๋ผ๋Š” ๊ฐœ๋…์ด ์—†์Šต๋‹ˆ๋‹ค.์„ธํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์„ ๋•Œ ์ด๋ฅผ ์œ ๋…ํ•˜์„ธ์š”.


 

์Šค์œ„ํ”„ํŠธ ์ฝœ๋ ‰์…˜ ํŒจํ‚ค์ง€ The Swift Collections package

์Šค์œ„ํ”„ํŠธ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ 3๊ฐœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ธ ๋ฐฐ์—ด Array, ์„ธํŠธ Set, ๋”•์…”๋„ˆ๋ฆฌ Dictionary ๋งŒ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์Šค์œ„ํ”„ํŠธ ์ฝœ๋ ‰์…˜ ํŒจํ‚ค์ง€ Swift Collections package ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธใ…”์š”. ์ด ํŒจํ‚ค์ง€๋Š” ๊ณต์‹ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋˜๊ธฐ ์ „์˜ ์ƒˆ๋กœ์šด ์ฝœ๋ ‰์…˜ ํƒ€์ž…์„ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋‹ค์Œ ์„น์…˜์—์„œ ์ด ํŒจํ‚ค์ง€์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ค‘ ํ•˜๋‚˜๋ฅผ ๊นŠ์ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋ฐํฌ Deque

์•ž์„œ ์šฐ๋ฆฌ๋Š” ๋ฐฐ์—ด Array ์˜ ๋งจ ์•ž์— ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์ด ๋ชจ๋“  ์š”์†Œ์˜ ์ด๋™์„ ์•ผ๊ธฐํ•œ๋‹ค๊ณ  ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

์–ธ๋œป ๋ณด๊ธฐ์— ๋ฐํฌDeque (”deck”๋ฑ์œผ๋กœ ๋ฐœ์Œ๋ฉ๋‹ˆ๋‹ค) ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐฐ์—ด Array ๊ณผ ๋™์ผํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋ฐํฌ๋Š” ๊ฐ’์„ ์ˆœ์„œ๋Œ€๋กœ ๋ณด๊ด€ํ•˜๋Š” ๋ฒ”์šฉ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด Array ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ append ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐํฌ Deque ์— ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ remove(at:)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ถ€ ์ธ๋ฑ์Šค์˜ ํŠน์ • ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‹ค์ œ๋กœ ๋ฐฐ์—ด Array ๊ณผ ๋ฐํฌ Deque ๋‘˜ ๋‹ค ๋™์ผํ•œ ์ฝœ๋ ‰์…˜ ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ๋ฐฐ์—ด Array ๋ณด๋‹ค ๋ฐํฌ Deque ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ์‹œ๊ฐ„๋ณต์žก์„ฑ์„ ๊ณ ๋ คํ•˜๊ธฐ ์ „๊นŒ์ง€ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„ tradeoff ๋ฅผ ํ™•์ธํ•˜๊ธด ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

 

๋ฐํฌ Deque ๋Š” ์–‘๋ฐฉํ–ฅ[double-ended] ํqueue ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ๋•Œ๋ฌธ์— ๋ฐํฌ Deque ๋Š” ์ฝœ๋ ‰์…˜์˜ ์•ž๊ณผ ๋’ค์—์„œ ์ˆ˜์ •์ด ์ตœ์ ํ™” ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด Array ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ฐํฌ์˜ Deque ์•ž์—์„œ ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์€ ์ €๋ ดํ•œ O(1) ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

 

์ข‹๋„ค์š”. ๊ทธ๋ ‡๋‹ค๋ฉด ๋‹จ์ ์€ ๋ฌด์—‡์ผ๊นŒ์š”? ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ƒ์˜ ๋ชจ๋“  ๊ฒƒ๋“ค์€ ๋ชจ๋‘ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„ tradeoff ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐํฌ Deque ์˜ ๊ฒฝ์šฐ, ๋ฐํฌ์˜ ์•ž๋ถ€๋ถ„์—์„œ ์ˆ˜์ •์ด ์šฉ์ดํ•ด์ง„ ๋Œ€์‹ , ๋‚˜๋จธ์ง€ ๋ชจ๋“  ๊ฒƒ๋“ค์˜ ์„ฑ๋Šฅ์„ ์กฐ๊ธˆ์”ฉ ์ €ํ•˜์‹œํ‚ต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๋กœ์„œ ์˜ต์…˜์„ ํ‰๊ฐ€ํ•˜๊ณ  ์ž‘์—…์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋„๊ตฌ๋ฅผ ๊ณ ๋ฅด๋Š” ๊ฒƒ์ด ์—ฌ๋Ÿฌ๋ถ„์˜ ์ผ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„์ด ์ฝœ๋ ‰์…˜์˜ ์•ž๋ถ€๋ถ„์—์„œ ์ž์ฃผ ์ˆ˜์ •์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ฐํฌ Deque ๊ฐ€ ๋ฐฐ์—ด Array ๋ณด๋‹ค ํ›จ์”ฌ ์„ฑ๋Šฅ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์œผ๋กœ ์น˜ํ™˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋น ๋ฅธ์•ฑ๊ณผ ๋Š๋ฆฐ ์•ฑ์˜ ์ฐจ์ด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์Šค์œ„ํ”„ํŠธ ์ฝœ๋ ‰์…˜ ํŒจํ‚ค์ง€๋Š” OrderedDictionary , OrderedSet ์™€ ๊ฐ™์€ ๋ถ€๊ฐ€์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ ‘๋‘์–ด์—์„œ ๋ณด์ด๋Š” ๋ฐ”์™€ ๊ฐ™์ด ์ด๋“ค์€ ์š”์†Œ์˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ Dictionary ์™€ ์„ธํŠธ Set ์˜ ๋ณ€ํ˜•์ž…๋‹ˆ๋‹ค. ๋ฐํฌ Deque ์™€ ๊ฐ™์ด ์ด๋Ÿฐ ์ž๋ฃŒ๊ตฌ์กฐ๋“ค์€ ์„ฑ๋Šฅ์ƒ์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด์„œ๋Š” https://swift.org/blog/swift-collections/ ์ด ๋งํฌ์—์„œ ๋” ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•ต์‹ฌ ์š”์•ฝ Key points

  • ๋ชจ๋“  ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๊ฐ๊ธฐ ์žฅ์ ๊ณผ ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์•„๋Š” ๊ฒƒ์€ ์ข‹์€ ์„ฑ๋Šฅ์˜ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฐ ํ•ต์‹ฌ์ด ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐ์—ด Array ์—์„œ  insert(at:) ๊ณผ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ณ„ํš์—†์ด ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋Š” ์„ฑ๋ŠฅํŠน์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ์•ž๋ถ€๋ถ„๊ณผ ๊ฐ€๊นŒ์šด ์ธ๋ฑ์Šค์— insert(at:) ๋ฉ”์†Œ๋“œ๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋ฉด ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ linked list ์™€ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋”•์…”๋„ˆ๋ฆฌ Dictionary ๋Š” ์ˆœ์„œ๋ฅผ ๊ฐ€์ง€๋Š” ๋Œ€์‹  ๋น ๋ฅธ ์‚ฝ์ž…๊ณผ ๊ฒ€์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„ธํŠธ Set ๋Š” ๊ฐ’์˜ ์ฝœ๋ ‰์…˜์—์„œ ๊ณ ์œ ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ์„ธํŠธ Set ๋Š” ์†๋„์— ์ตœ์ ํ™”๋˜์–ด์žˆ์œผ๋ฉฐ ์š”์†Œ์˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ํฌ๊ธฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์Šค์œ„ํ”„ํŠธ ์ฝœ๋ ‰์…˜ ํŒจํ‚ค์ง€๋Š” ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๋” ์ž˜ ์ˆ˜ํ–‰ํ•˜๋Š” ํŠน๋ณ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

 


๐Ÿ”— ๋ฒˆ์—ญ ์‹œ๋ฆฌ์ฆˆ ๋งํฌ

0๏ธโƒฃ ์„น์…˜ 0. ์‹œ์ž‘ํ•˜๊ธฐ์ „์—

 

[Swift][๋ฒˆ์—ญ] ์Šค์œ„ํ”„ํŠธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์„น์…˜ 0. ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

์š”์ฆ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ Raywenderlich.com ์—์„œ ๋‚˜์˜จ Data Structures & Algorithms in Swift์ด ์ฑ…์„ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. https://www.raywenderlich.com/books/data-structures-algorithms-in-swift ์ €๋Š” ์ •..

kimdee.tistory.com

1๏ธโƒฃ ์„น์…˜ 1. ์†Œ๊ฐœ Introduction

> ์ฑ•ํ„ฐ 1.์™œ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐฐ์›Œ์•ผํ• ๊นŒ์š”? / ์ฑ•ํ„ฐ 2. ๋ณต์žก๋„  Complexity

 

[Swift][๋ฒˆ์—ญ] ์Šค์œ„ํ”„ํŠธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์„น์…˜ 1. ์†Œ๊ฐœ - ์ฑ•ํ„ฐ1. ์™œ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„

Raywenderlich.com ์—์„œ ๋‚˜์˜จ Data Structures & Algorithms in Swift ์ฑ…์˜ ๋ฐ๋ชจ ๊ณต๊ฐœ๋ณธ์„ ๋ฒˆ์—ญํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ฆ๊ฒ๊ฒŒ ๋ด์ฃผ์„ธ์š”. https://www.raywenderlich.com/books/data-structures-algorithms-in-swift ์„น์…˜..

kimdee.tistory.com

> ์ฑ•ํ„ฐ3. ์Šค์œ„ํ”„ํŠธ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Swift Standard Library

 

[Swift][๋ฒˆ์—ญ] ์Šค์œ„ํ”„ํŠธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์„น์…˜ 1. ์†Œ๊ฐœ - ์ฑ•ํ„ฐ3. ์Šค์œ„ํ”„ํŠธ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ S

Raywenderlich.com ์—์„œ ๋‚˜์˜จ Data Structures & Algorithms in Swift ์ฑ…์˜ ๋ฐ๋ชจ ๊ณต๊ฐœ๋ณธ์„ ๋ฒˆ์—ญํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ฆ๊ฒ๊ฒŒ ๋ด์ฃผ์„ธ์š”. https://www.raywenderlich.com/books/data-structures-algorithms-in-swift ์„น์…˜..

kimdee.tistory.com

 

1๏ธโƒฃ ์„น์…˜ 2. ๊ธฐ์ดˆ ์ž๋ฃŒ๊ตฌ์กฐ Elementary Data Structure

> ์ฑ•ํ„ฐ 4. ์Šคํƒ Stacks /  ์ฑ•ํ„ฐ 5. ์Šคํƒ ๋„์ „๊ณผ์ œ Stack Challenges

 

[Swift][๋ฒˆ์—ญ] ์Šค์œ„ํ”„ํŠธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์„น์…˜ 2. ๊ธฐ์ดˆ ์ž๋ฃŒ๊ตฌ์กฐ - ์ฑ•ํ„ฐ4~5. ์Šคํƒ, ์Šคํƒ ๋„์ „

Raywenderlich.com ์—์„œ ๋‚˜์˜จ Data Structures & Algorithms in Swift ์ฑ…์˜ ๋ฐ๋ชจ ๊ณต๊ฐœ๋ณธ์„ ๋ฒˆ์—ญํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ฆ๊ฒ๊ฒŒ ๋ด์ฃผ์„ธ์š”. https://www.raywenderlich.com/books/data-structures-algorithms-in-swift ์„น์…˜..

kimdee.tistory.com

> ์ฑ•ํ„ฐ 6-1. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ Linked List (์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ •์˜, ์š”์†Œ ์ถ”๊ฐ€, ์‚ญ์ œ)

 

 

[Swift][๋ฒˆ์—ญ] ์Šค์œ„ํ”„ํŠธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์„น์…˜ 2. ๊ธฐ์ดˆ ์ž๋ฃŒ๊ตฌ์กฐ - ์ฑ•ํ„ฐ6-1. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ (์ •

[Swift][๋ฒˆ์—ญ] ์Šค์œ„ํ”„ํŠธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์„น์…˜ 2. ๊ธฐ์ดˆ ์ž๋ฃŒ๊ตฌ์กฐ - ์ฑ•ํ„ฐ6-1. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ Raywenderlich.com ์—์„œ ๋‚˜์˜จ Data Structures & Algorithms in Swift ์ฑ…์˜ ๋ฐ๋ชจ ๊ณต๊ฐœ๋ณธ์„ ๋ฒˆ์—ญํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ฆ๊ฒ..

kimdee.tistory.com

> ์ฑ•ํ„ฐ 6-2. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ Linked List (์Šค์œ„ํ”„ํŠธ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฝœ๋ ‰์…˜ ํ”„๋กœํ† ์ฝœ, ์นด์šฐ Copy-On-Write,  ๋ฐธ๋ฅ˜ ์‹œ๋งจํ‹ฑ)

 

 

[Swift][๋ฒˆ์—ญ] ์Šค์œ„ํ”„ํŠธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์„น์…˜ 2. ๊ธฐ์ดˆ ์ž๋ฃŒ๊ตฌ์กฐ - ์ฑ•ํ„ฐ6-2. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

[Swift][๋ฒˆ์—ญ] ์Šค์œ„ํ”„ํŠธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์„น์…˜ 2. ๊ธฐ์ดˆ ์ž๋ฃŒ๊ตฌ์กฐ - ์ฑ•ํ„ฐ6-2. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ (์Šค์œ„ํ”„ํŠธ ์ฝœ๋ ‰์…˜ ํ”„๋กœํ† ์ฝœ, ๋ฐธ๋ฅ˜ ์‹œ๋งจํ‹ฑ, COW(์นดํ”ผ-์˜จ-๋ผ์ดํŠธ)) Raywenderlich.com ์—์„œ ๋‚˜์˜จ Data Structures &..

kimdee.tistory.com

 

> ์ฑ•ํ„ฐ 7. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๋„์ „๊ณผ์ œ Linked List Challenges

 

[Swift][๋ฒˆ์—ญ] ์Šค์œ„ํ”„ํŠธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์„น์…˜ 2. ๊ธฐ์ดˆ ์ž๋ฃŒ๊ตฌ์กฐ - ์ฑ•ํ„ฐ7. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๋„์ „

[Swift][๋ฒˆ์—ญ] ์Šค์œ„ํ”„ํŠธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์„น์…˜ 2. ๊ธฐ์ดˆ ์ž๋ฃŒ๊ตฌ์กฐ - ์ฑ•ํ„ฐ7. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๋„์ „๊ณผ์ œ Raywenderlich.com ์—์„œ ๋‚˜์˜จ Data Structures & Algorithms in Swift ์ฑ…์˜ ๋ฐ๋ชจ ๊ณต๊ฐœ๋ณธ์„ ๋ฒˆ์—ญํ•˜์˜€์Šต๋‹ˆ๋‹ค..

kimdee.tistory.com

 


๋งˆ์น˜๋ฉฐ 

 

์˜ค๋Š˜๋„ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ, ๋„์›€์ด ๋˜์…จ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

ํ˜น์‹œ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํ”ผ๋“œ๋ฐฑํ•˜์‹ค  ๋‚ด์šฉ ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“  ๋Œ“๊ธ€๋กœ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

 

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•

'๐Ÿ’ป Programming ๊ฐœ๋ฐœ > ๐ŸŽ iOS ๊ฐœ๋ฐœ, Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Swift][๋ฒˆ์—ญ] ์Šค์œ„ํ”„ํŠธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์„น์…˜ 2. ๊ธฐ์ดˆ ์ž๋ฃŒ๊ตฌ์กฐ - ์ฑ•ํ„ฐ6-1. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ (์ •์˜, ์‚ฝ์ž…, ์‚ญ์ œ)  (0) 2022.05.30
[Swift][๋ฒˆ์—ญ] ์Šค์œ„ํ”„ํŠธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์„น์…˜ 2. ๊ธฐ์ดˆ ์ž๋ฃŒ๊ตฌ์กฐ - ์ฑ•ํ„ฐ4~5. ์Šคํƒ, ์Šคํƒ ๋„์ „๊ณผ์ œ  (0) 2022.05.23
[Swift][๋ฒˆ์—ญ] ์Šค์œ„ํ”„ํŠธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์„น์…˜ 1. ์†Œ๊ฐœ - ์ฑ•ํ„ฐ1. ์™œ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐฐ์›Œ์•ผํ• ๊นŒ์š”? ์ฑ•ํ„ฐ2. ๋ณต์žก๋„  (0) 2022.05.13
[Swift][๋ฒˆ์—ญ] ์Šค์œ„ํ”„ํŠธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์„น์…˜ 0. ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—  (1) 2022.05.13
[Swift] ์‚ฌ์šฉ์ž ์ปฌ๋Ÿฌ์…‹ ์ถ”๊ฐ€ํ•˜๊ณ  UI Color ํ™•์žฅํ•˜์—ฌ ์ฝ”๋“œ๋กœ ์ ‘๊ทผํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ  (0) 2022.04.04

๋Œ“๊ธ€