아삭아삭 iOS 개발

Swift 알고리즘에 자주 쓰이는 기초 문법 정리 본문

카테고리 없음

Swift 알고리즘에 자주 쓰이는 기초 문법 정리

바닐라머스크 2022. 10. 14. 19:59

 

매번 구글링하기 귀찮은 내용들 정리합니다~~

지속적인 업데이트 예정

 

입력받기 & 쪼개기

▶ 키보드 입력받기

  • readLine()의 리턴값 타입은 Optional String
let value = readLine()
  • Int형 한 개의 숫자 입력 받기
var num = Int(readLine()!)!

 

▶ 키보드로 입력받은 값, 공백으로 구분하기

  • split()으로 쪼개는 방법
    - split은 Foundation 없이도 사용 가능 (swift 기본 instance method이기 때문)
    - 리턴값의 타입은 [String.Sequence]
    - 그래서 split 사용해서 쪼갤 경우 바로 String으로 사용 불가
    (그래도 map을 사용하면 되니 import없는 split을 쓰기도 함)
let nums = readLine()!.split(seperator:" ") // ["도", "레", "미", "파"]
  • component()로 쪼개는 방법
    - Foundation import 필요 (component는 Foundation에 들어있는 instance method임)
    - 리턴값의 타입은 [String]
    - 용량이 늘어날 수도 있음
let nums = readLine()!.components(seperatedBy:" ") // ["도", "레", "미", "파"]

 

▶ 공백없는 숫자를 배열로 입력받기

- Int($0)! 보다 Int(String($0))! 이 속도가 더 빠름

var nums = Array(readLine()!).map {Int(String($0))!}

var nums = Array(numbers).map {String($0)}

 

String, Substring 다루기

 

 

Index 다루기

 

 


 

Array 다루기

  • 생성하기
// 빈배열
var arr : Array<Int> = []
var arr : [Int] = []
var arr = [Int]()

// 크기가 정해진 배열
var arr = Array(repeating: 0, count: 5) // [0, 0, 0, 0, 0]
var arr = [Int](repeating: 9, count: 5) // [9, 9, 9, 9, 9]

// 데이터 넣어서 배열생성
var arr = Array(1...99) // [1,2,...,98, 99]

// 2차원 배열
let matrix = [[Int]]()
// []

let arr: [[Int]] = Array(repeating: Array(repeating: 0, count: 4), count: 3)
// [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0] ]

arr[1][3] // [0]

let arr = [[Int]](repeating: [Int](repeating: 0, count: 4), count: 3)
// [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0] ]

let arr = Array(repeating: [Int](), count: 3)
// [[], [], []]
  • sort하기
// 오름차순 (deault)
arr.sort()
arr.sort(by: <)

arr.sorted()
arr.sorted(by: <)

// 내림차순
arr.sort(by: >)
arr.sorted(by: >)
  • 출력하기
var arr = [1, 3, 5, 7, 9]
arr.reverse()
// [9, 7, 5, 3, 1]

var arr = [1, 3, 5, 7, 9]
var rarr = arr.reversed()
// ReversedCollection<Array<Int>>(_base: [1, 3, 5, 7, 9])
// 타입주의!!
  • 특정 요소 count
let arr = ["가", "나", "다", "가", "마", "가"]
apb.filter { $0 == "가" }.count // 3
  • 각 요소 count
let arr = ["A", "B", "C", "D", "A", "A", "B", "D]
var count = [String: Int]()
arr.forEach { counter[$0, default: 0] += 1 }

print(count) // ["A": 3, "B": 2, "C": 1, "D": 2]
  • 고차함수 적용하기 (map, filter, reduce)

1) map

var arr = ["1", "3", "5", "7", "9"]
arr.map { Double($0)! } // [1.0, 3.0, 5.0, 7.0, 9.0]

var lunchMenu = ["연어포케": "a", "바질파스타": "b", "추어탕": "c", "타코보울": "d"]
lunchMenu.map { $0.0 } // ["연어포케", "바질파스타", "타코보울", "추어탕"]
lunchMenu.map { $0.1 } // ["a", "b", "d", "c"]

var arr: Set<Int> = [1, 3, 5, 7, 9]
arr.map { $0 * 3 } // [27, 15, 9, 21, 3] 순서가 없다는게 포인트

var degree = 9...15
degree.map { $0 * 2 } // [18, 20, 22, 24, 26, 28, 30]

2) filter

var arr = Array(1...30)
arr.filter { $0 % 10 == 0 } // [10, 20, 30]

3) reduce
- reduce(_:_)는 Int, String같은 단일 값을 받아서 작업 후, 단일 값으로 결과를 얻음

let arr = ["Fly", "Me", "to", "the", "Moon"]
arr.reduce("Playing MUsic : ") { $0 + " " + $1 } // Playing MUsic :  Fly Me to the Moon

var arr = [1, 3, 5, 7, 9]
arr5.reduce(0, +) // 25

 

- reduce(intro:_)는 Array, Dictionary 타입을 결과로 얻고자 할 때 사용

let letters: String = "oldtownroad"

let dictionary: [Character: Int] = letters.reduce(into: [:]) { counts, letter in
    counts[letter, default: 0] += 1
}
// ["l": 1, "a": 1, "w": 1, "d": 2, "r": 1, "o": 3, "t": 1, "n": 1]

 

Dictionary 다루기

  • 생성하기
  • 삭제하기
  • 추가하기
  • 수정하기
  • 읽기
  • sort하기
  • 반복에 적용하기