Swift 25

[기초] 옵셔널 (Optionals)

값이 없는 경우에 Optionals을 사용한다. Swift의 옵셔널은 어떠한 타입에 대해서 값이 없음 (nil)을 나타낼 수 있다. 그래서 let possibleNumber = "123" let convertedNumber = Int(possibleNumber) // convertedNumber is inferred to be of type "Int?", or "optional Int" 아래 같은 경우에 Int가 아닌 Int?의 옵셔널 형태가 된다. 여기서 Int?의 의미는 Int이거나 아무런 값이 없는 것을 뜻한다. 옵셔널 변수에 nil이 있어 값이 없는 상태를 나타낼 수 있다. Swift에서의 nil은 특정 타입의 값이 없음을 나타낸다. 옵셔널에 값이 포함되어 있다고 확신하면 옵셔널 끝에 느낌표(!)..

[Swift] 백준풀이를 위한 Queue

백준을 풀고있는 어느날... 무수히 많은 시간초과를 겪은뒤 결국 Queue를 사용하기로 했다.. Queue란? Queue를 구글에 쳐보니 대기줄이라는 뜻이 있다. Stack에서는 LIFO(Last In First Out) 즉, 제일 위에서만 데이터가 들어갔다 나갔다 한다고 보면 된다. 하지만 Queue는 FIFO(First In First Out)이다. 위의 그림과 같이 먼저 들어온 것이 먼저 나간다는 뜻이다. Queue에 넣는것을 enQueue, 꺼내는 것을 deQueue라고 한다. Stack에서와 달리 Queue는 앞부분과 뒷부분의 포인터가 필요하다. Dequeue를 아래와 같이 만들어서 쓰는 이유는 Swift에서 배열을 사용할때 시간초과가 발생하기 때문... element를 모두 옮겨주는 과정이 있..

[Swift] 백준 1620번 나는야 포켓몬 마스터 이다솜

문제 링크 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net 문제 풀이 나의 풀이 import Foundation let NM = readLine()!.split(separator: " " ).map{Int(String($0))!} var array1 = [String : Int]() var array2 = [Int : String]() for i in 1...NM[0] { let p = readLine()! array1[p] = i array2[i] = p } for _ in 1...

[Swift] 백준 2164 카드2

문제 링크 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 문제 풀이 나의 풀이 import Foundation let N = Int(readLine()!)! var quene = Array(1...N) var n = 0 if N == 1 { print(1) } else { while true { quene[n] = 0 quene.append(quene[n+1]) quene[n+1] = 0 if quene[quene.count-2] == 0 { print(quene.last!) break } n += 2 } ..

[기초] 클로저

드디어 대망의 클로저... 스위프트 공식문서를 찾아보니 Group code that executes together, without creating a named function.라고 한다. 명명된 함수 없이 실행되는 코드의 그룹이 클로저라는 것이다. Closures are self-contained blocks of functionality that can be passed around and used in your code. 클로저는 자체적인 기능을 가진 블록이라고 한다. // String을 반환하는 클로저 let myName: String = { // myName으로 들어간다 return "Swift" }() print(myName) 출력값 : Swift myName은 String값을 가지고 있고 ..

[기초] 제네릭

제네릭은 어떠한 형태도 입력 받을 수 있다. // T는 타입의 약자? struct MyArray{ //제네릭을 담은 빈 배열 var elements : [T] = [T]() //생성자 init(_ elements: [T]){ self.elements = elements } } struct Friend { var name: String } struct Coffee { var name : String } var mySomeArray = MyArray([1,2,3]) var myStringArray = MyArray(["a","b","c"]) let friend_1 = Friend(name: "A") let friend_2 = Friend(name: "B") let friend_3 = Friend(name: ..

[기초] 프로퍼티 옵저버, 함수 매개변수 이름

프로퍼티 옵저버 var myAge = 0 { willSet{ print(myAge) } didSet{ print(myAge) } } myAge = 10 0 10 값이 어떻게 변화했는지 알 수 있는 방법이다. 함수 매개변수 이름 func myFunc(name: String) -> String { return "안녕하세요 \(name)입니다." } myFunc(name: "swift") func myFunc2(with name: String) -> String { return "안녕하세요 \(name)입니다." } myFunc2(with: "swiftUI") func myFunc3(_ name: String) -> String { return "안녕하세요 \(name)입니다." } myFunc3("code"..

[기초] 클래스 vs 스트럭트

class와 struct의 차이! 간단하게 정리해 보면 class는 연결되어 있고, struct는 연결되어 있지 않다! 그리고 print를 해보면서 느낀건데 struct는 foodStruct(name: "Chicken", price: 18000) 같은 형식으로 출력이 되지만 class는 그렇게 출력이 되지 않는다! struct foodStruct { var name : String var price : Int } var a = foodStruct(name: "Chicken", price: 18000) var b = a b.price = 20000 print(a) print(b.name, b.price) foodStruct(name: "Chicken", price: 18000) Chicken 20000 이..

[기초] Unwrap 옵셔널변수

옵셔널은 값이 있는지 없는지 모를때 쓴다. var something : Int? = nil if something == nil { something = 90 } something을 프린트하게 되면 Expression implicitly coerced from 'Int?' to 'Any'라는 문구가 뜨면서 Optional(90)이 출력된다. if let other = something { print("Unwraping \(other)") } else { print("값이 없다.") } 출력은 Unwraping 90으로 나온다. 이것은 Unwraping된 것이다. something = nil let value = something ?? 10 print(value) 출력은 10으로 나온다. 기본값을 넣어버리면..