Manhattan Distance
Swift : 알고리즘, 코딩 테스트 대비 Basic 본문
기본 입력 받기
// String 타입 입력 받을 때 사용
var input = readLine()!
// Int 타입 입력 받을 때 사용
var input = Int(readLine()!)!
공백 있는 숫자 입력 받기
var arr = readLine()!.split(separator: " ").map {Int($0)!} // 1 2 3
print(arr) // [1, 2, 3]
공백 없는 숫자/문자열을 배열로 입력 받기
// 공백 없는 숫자 -> 배열
var arr = Array(readLine()!).map {Int(String($0))!} 123
print(arr) // [1, 2, 3]
// 공백 없는 문자열 -> 배열
var arr = Array(readLine()!).map {String($0)} // ABC
print(arr) // ["A", "B", "C"]
prefix / suffix
let str = "Manhattan Distance"
// prefix : 시작 기준으로 지정한 문자 개수 출력
let prefixStr = str.prefix(5)
print(prefixStr) // "Mahat"
// suffix : 종료 기준으로 지정한 문자 개수 출력
let suffixStr = str.suffix(6)
print(suffixStr) // "stance"
let arr = [1, 2, 3, 4, 5]
print(arr.prefix(2)) // [1, 2]
print(arr.prefix(10)) // [1, 2, 3, 4, 5]
let arr = [1, 2, 3, 4, 5]
print(arr.suffix(2)) // [4, 5]
print(arr.suffix(10)) // [1, 2, 3, 4, 5]
subString
let str = "Manhattan Distance"
// 3번째부터 끝까지
let startIdx: String.Index = str.index(str.startIndex, offsetBy: 3)
var result = String(str[startIdx...])
print(result) // "hattan Distance"
// 처음부터 3번째까지
let endIdx: String.Index = str.index(str.startIndex, offsetBy: 3)
var result = String(str[...endIdx])
print(result) // "Manh"
문자열 반복
let str = String(repeating: "A", count: 10)
print(str) // AAAAAAAAAA
동일한 값으로 구성된 n(행) x m(열) 배열 만들기
var graph: [[Int]] = Array(repeating: Array(repeating: 0, count: m), count: n)
문자열에 특정 문자 바꾸기
// import Foundation
let str1 = "Manhattan!Distance!"
let str2 = str1.replacingOccurrences(of: "!", with: "?")
print(str2) // "Manhattan?Distance?"
개행없는 print
print("Manhattan", terminator: "")
print("Distance")
// "ManhattanDistance"
forEach
let arr: [Int] = [1, 2, 3, 4]
arr.forEach {
print($0)
}
// 1
// 2
// 3
// 4
stride
for i in stride(from: 2, to: 10, by: 2) {
print(i)
}
// 2
// 4
// 6
// 8
for i in stride(from: 2, through: 10, by: 2) {
print(i)
}
// 2
// 4
// 6
// 8
// 10
절댓값
print(abs(-10)) // 10
제곱
// import Foundation
let x = 3.0
print(pow(x, 2)) // 9.0
print(pow(x, 3)) // 27.0
제곱근
// import Foundation
let x = 9.0
print(sqrt(x))
자릿수 더하기
let n = 123
// reduce([초기값]) / $0 = 0, 1(0+1), 3(1+2), 6(3+3) / Int($1)! = 1, 2, 3
print(String(n).map{ String($0)}.reduce(0){ $0 + Int($1)! }) // 6
배열 슬라이싱
var arr = [1, 2, 3, 4, 5]
print(arr[1 ... 3]) // [2, 3, 4]
map
var arr = ["1", "2", "3", "4"]
// 각 원소를 전부 Int로 Mapping
print(arr.map { Int($0)! }) // [1, 2, 3, 4]
filter
var arr = [1, 2, 3, 4]
print(arr.filter { $0%2 == 0 }) // [2, 4]
reduce
let arr = [1, 2, 3]
// reduce([초깃값]) / $0 = 3, 4(3+1), 6(4+2), 9(6+3) / $1 = 1, 2, 3
var sumFromThree: Int = arr.reduce(3) {
print("\($0) + \($1)")
// 3 + 1
// 4 + 2
// 6 + 3
return $0 + $1
}
print(sumFromThree) // 9
var arr = [1, 2, 3]
print(arr.reduce(0, +)) // 6
joined
var arr = ["Manhattan", "Distance"]
var result1 = arr.joined()
print(result1) // "ManhattanDistance"
var result2 = arr.joined(separator:" ")
print(result2) // "Manhattan Distance"
var result3 = arr.joined(separator:", ")
print(result3) // "Manhattan, Distance"
var arr: [Int] = [1, 2, 3]
print(arr.map{String($0)}.joined()) // 123
print(arr.map{String($0)}.joined(separator: " ")) // 1 2 3
print(arr.map{String($0)}.joined(separator: ", ")) // 1, 2, 3
2차원 배열 정렬
var arr = [[1, 3], [2, 2], [3, 1]]
let sortedArr1 = arr.sorted(by: {$0[1] < $1[1] }) // 각 배열 두 번째 값 기준으로 오름차순
print(sortedArr1) // [[3, 1], [2, 2], [1, 3]]
let sortedArr2 = arr.sorted(by: {$0[1] > $1[1] }) // 각 배열 두 번째 값 기준으로 내림차순
print(sortedArr2) // [[1, 3], [2, 2], [3, 1]]