본문 바로가기

전체 글

(57)
Queue Queue Queue는 Stack과 다르게 First - In - First - Out (FIFO)입니다. 먼저 들어간 순서대로 작업해줍니다. James, Tom, Peter, May 순서대로 서있다고 가정했을 때 가장 먼저 서있는 James부터 처리하고 가장 나중에 합류한 TIM은 맨 마지막에 서게 됩니다. Queue Protocol, QueueArray 구조체 protocol Queue { associatedtype Element mutating func enQueue(_ element : Element) -> Bool mutating func deQueue() -> Element? var isEmpty : Bool { get } var peek : Element? { get } } associate..
Stack Stack stack은 쌓는다라는 의미로 마치 상자를 쌓듯이 자료를 쌓는 것을 의미합니다. 상자를 쌓게 되면 아래부터 상자를 못 빼듯이 처음 쌓인 순서대로 빠져나가는 것이 아닌 역순으로 뺄 수 있습니다. 이를 LIFO (Last - in - First - Out)이라 합니다. Push, Pop Push - Stack의 맨 위에 데이터를 쌓습니다. Pop - Stack 맨 위에서 테이터를 가져옵니다. 가져와서 삭제, 사용이 가능합니다. struct Stack { private var storage : [Element] = [] init() {} mutating func push(_ element : Element) { storage.append(element) } mutating func pop() -> ..
Linked List Linked List Array List와 다르게 연결되어 있기 때문에 개별 하나를 Node라고 부른다. Node 안에는 2개의 변수를 가지는데 첫 번째는 저장되는 값인 Data Field, 두 번째는 다음 Node의 Reference를 알기 위한 Link Field 가 있습니다. Linked List를 사용하기 위해서는 첫번째 Node를 알고 있어야만 Link Field를 통해 다음 Node로 갈 수가 있습니다. 첫 번째 Node가 무엇인지의 데이터를 가지고 있는 변수를 HEAD라고 합니다. Implementing the Node Class class Node { var value : Value var next : Node? init(value : Value, next : Node? = nil) { s..
Time Complexity Time Complexity (시간 복잡도) 문제를 해결하는데 걸리는 시간과 입력한 함수 관계를 나타낸다. Constant Time names 배열에 첫 번째 요소가 있다면 요소를 print 하고 없다면 no names를 리턴하는 함수라고 했을 때 Constant Time 은 names 배열이 10개던지 1000만 개랑 상관없이 리턴하는 시간은 똑같습니다. 데이터의 크기와 상관없이 일정한 시간이 걸립니다. func checkFirst(names : [String]) { if let first = names.first { print(first) }else{ print("no names") } } Linear Time names 배열의 배열 요소들을 print에 출력하는 함수라고 했을 때 배열의 개수가 증가..
7. Filter, Map, Reduce Higher Order Functions Filter let numbers = [1, 2, 3, 4, 3, 3] // Filter 사용 let filtered = numbers.filter{$0 == 3} filtered // [3, 3, 3] // for in var filteredArray = [Int]() for number in numbers { if number == 3 { filteredArray.append(number) } } filteredArray // [3, 3, 3] Filter는 배열중 원하는 값의 배열을 추출해 배열로 만들어 주는 고차함수 Map // Map 사용 let transformed = [1, 2, 3, 4].map({$0 * 2}) transformed // [2, 4, 6, 8] // for in var t..
6. Fibonacci Sequence Fibonacci Sequence 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144와 같이 앞의 두 수의 합이 뒤의 수가 되는 수의 배열 func fibForNumSteps(_ numSteps : Int) -> [Int] { var sequence = [0, 1] if numSteps [Int] { if numSteps == 0 { return [] } print(first, second) return [first + second] + fibRecursionForNumSteps(numSteps - 1, second, first + second) } [0, 1] + fibRecursionForNumSteps(10, 0, 1) // [0, 1, 1, 2, 3, 5, 8, 13,..
5. Reverse every other word Reverse every other word 단어를 역순으로 바꾸는 방법 var sampleSentence = "Lets start today by completing a very interesting challenge" func reverseWordsInSentence (_ sentence : String) -> String { let allWords = sampleSentence.components(separatedBy: " ") var newSentence = "" for word in allWords { if newSentence != "" { newSentence += " " } let reverseWord = String(word.reversed()) newSentence += reverseW..
4. Most Common Name in Array 4. Most Common Name in Array 딕셔너리 배열을 통해 가장 많이 등장하는 이름을 찾는 알고리즘 func mostCommonNameInArray (_ array : [String]) -> String { var nameCountDictionary = [String : Int]() for name in array { if let count = nameCountDictionary[name] { nameCountDictionary[name] = count + 1 }else { nameCountDictionary[name] = 1 } } var mostCommonName = "" for key in nameCountDictionary.keys { if mostCommonName == "" { ..