2021. 9. 2. 17:52ㆍ🍏/Swift
알고리즘 코딩 테스트를 위한 Swift 요약 정리
입력(Input)
Line 단위로 읽어오기.
1
|
let value = readLine()
|
Line단위로 읽어오는데, 공백(Space)으로 구분되어 있는 입력
ex) Input = 1 2 3 4
1
2
|
let nums = readLine()!.split(seperator:" ") // String.SubSequence Type [map]으로 커버 가능
let nums = readLine()!.components(seperatedBy:" ") // String Type [import Foundation] 필수.
|
입력을 split을 사용하여 받아온다면 mapping으로 변수를 사용할 수 있다.
다른 방법으로는 components를 사용하는 방법이 있는데, components는 foundation의 instance method이므로 이를 사용하려면 import Foundation 해주어야 한다.
Int값으로 바로 읽어오기
1
|
let n: Int = Int(readLine()!)!
|
Maping할때 Int값으로 바로 읽어오기
String.subsequence -> Int 형변환 보다
String.subsequence -> String -> Int 형변환이 더 빠르다. (입력에서 시간초과 난다 싶으면 사용)
1
|
let numb: [Int] = readLine()!.split(separator: " ").map { Int(String($0))! }
|
배열(Array)
배열선언과 동시에 String타입으로 초기값 부여.
1
2
|
let someArray: Array<String> = ["Alex", "Brian", "Dave"]
let someArray: [String] = ["Alex", "Brian", "Dave"]
|
배열선언과 동시에 Int타입으로 초기화
1
2
3
4
5
|
var arr = [Int]()
var arr : [Int] = []
var arr : Array<Int> = []
var arr2 = [[Int]]()
|
배열선언과 동시에 Int타입으로 초기값 부여 및 이차원배열
1
2
3
4
5
6
|
var arr = Array(1...5) // [1,2,3,4,5]
var arr = Array(repeating: 1, count: 5) // [1,1,1,1,1)
let arr2: [[Int]] = Array(repeating:Array(repeating:1, count: 5), count: 3)
// 안쪽 count가 행, 바깥 count가 열
arr2[i][j]
|
배열 정렬
1
2
3
4
5
6
|
var arr = [1,3,2,4]
arr.sort() // 오름차순 [1,2,3,4]
arr.sort(by: >) // 내림차순 [4,3,2,1]
//sort() - 원본 순서변경으로 배열정렬
//sorted() - 원본 변경없이 정렬한 배열을 반환.
|
3차원 배열
1
2
|
var array3D: [[[Int]]] = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
// array3D[0] 은 [[1, 2], [3, 4]] 를 참조하고 array3D[0][1] 은 [3, 4] 그리고 array3D[0][1][1] 은 값 4를 참조
|
배열 명령어 정리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
var arr = [1,2,3,4,5]
arr = [] //[]
// arr is now an empty array, but is still of type [Int]
arr = [1,2,3,4,5] // [1,2,3,4,5]
arr.append(6) // [1,2,3,4,5,6]
// arr now contains 1 value of type Int
// 인덱스로 원소 확인
arr[2] // 3
// 원소로 인덱스 확인 (옵셔널, 값이 없으면 오류)
arr.firstIndex(of: 3)! // 2
// 인덱스로 원소 지우기
arr.remove(at: 2) // [1,2,4,5,6]
// 맨 뒤 원소를 지우고 return (옵셔널이 아님, 배열이 비어있으면 에러)
arr.removeLast() // [1,2,4,5]
// 특정 인덱스에 원소 넣기
arr.insert(3, at: 2) // [1,2,3,4,5]
// 특정 원소 있는지 체크 bool type
arr.contains(3) // true
// 순서 반전
arr.reverse() // [5,4,3,2,1]
// 첫 원소를 지우고 return (옵셔널이 아님, 배열이 비어있으면 에러)
arr.removeFirst() // [4,3,2,1]
// 첫 원소 return (옵셔널, 값이 없으면 오류)
arr.first! // 4
// 마지막 원소 지우고 return (옵셔널, 배열이 비어있으면 return nil)
arr.popLast()!
// 마지막 원소 return (옵셔널)
arr.last!
// 원소의 최대값, 최소값 (옵셔널)
var min = arr.min()! // 1
var max = arr.max()! // 5
// 모든 원소 지우기
arr.removeAll()
// 조건을 만족하는 모든 원소 지우기
arr.removeAll(where: {$0 % 2 == 0})
//arr.removeAll{$0 % 2 == 0} // 위 코드 함축
// 원소 스왑
arr.swapAt(_:, _:)
|
맵핑(map)
1
2
|
var string = ["1","2","3","4"]
string.map { Int($0)! } // [1,2,3,4] 각 원소를 전부 Int로 맵핑
|
필터(filter)
1
2
|
var array = [1,2,3,4]
array.filter { $0 % 2 == 0 } // [2,4] 조건에 맞는 수만 뽑아냄
|
1
2
|
var array = [1,2,3,4]
array.reduce("", +)// 문자열 합 array.reduce(0, +) // 숫자 합
|
배열 인덱스(index), 값(value) 순회 참조
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
var arr = [1,2,3]
for n in arr {
print(n)
}
for (index, value) in arr.enumerated() {
print("\(index), \(value)")
}
for i in 0..<arr.count {
print(arr[i])
}
for i in arr.indices {
print(arr[i])
}
|
배열 뒤집기(reverse) 순회 참조
1
2
3
4
5
6
7
8
9
|
var arr = [1,2,3]
arr.reverse()
// 순회 참조 가능
for n in arr{
print(n)
}
print(arr[0])
|
문자열(String)
연결(joined)
1
2
3
4
5
6
|
let str = ["str", "ing", "!"]
var string = str.joined() // "string!"
string = str.joined(separator: " ") // str ing !
string = str.joined(separator: ", ") // str, ing, !
string = str.joined(separator: "a") // strainga!
|
알파벳 소문자 대문자간 변환
1
2
3
4
|
var str = "string"
str = str.capitalized // 첫번째만 대문자로 변경 "Abcdef" import Foundation 필수
str = str.uppercased() // 전체 대문자로 변경 "ABCDEF"
str = str.lowercased() // 전체 소문자로 변경 "abcdef
|
문자열 치환
1
2
3
4
5
|
import Foundation
var str = "asap"
var str2 = str.replacingOccurrences(of: "a", with: "b")
print(str) // 원본에 영향 없음
print(str2) // bbcdef
|
포함하는 값 찾기 (output: Bool)
1
2
3
4
5
6
7
|
import Foundation
var str = "string"
str.contains("g") // true
str.contains("st") // true
str.contains("ring") // true
str.contains("sti") // false
|
문자열 상태에서 계산 / 문자열안에 계산식이 들어 있을때
1 2 3 |
import Foundation let mathExpression = NSExpression(format: "3+4+2-1*6") // result : 3 let mathValue = mathExpression.expressionValue(with: nil, context: nil) as! Int |
문자열 인덱스(index) 명령어 정리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import Foundation
// 문자열 원소 접근
var str = "as soon as posible"
//str[0] // 직접 접근 불가능, String 인덱스로 접근가능
str[str.startIndex] // "a" 시작 원소
let secondIndex = str.index(after: str.startIndex) // 2번째 원소
let second = str[secondIndex]
let endIndex = str.index(before: str.endIndex) // 마지막 원소
// n번째 문자 가져오기 n == 3
var index = str.index(str.startIndex, offsetBy: 3 - 1)
str[index] // "c"
// 일정 범위의 문자열만 가져오기
let sub = str[str.startIndex...index] // "abc"
// 특정 character replace
str.replacingOccurrences(of:" ", with:"+") // import Foundation 필수
// 특정 원소 값으로 인덱스 찾기 (옵셔널 값) 해당하는 원소값이 없으면 에러
str.firstIndex(of: "n")!
// subString 구하는 법 특정 원소 첫 return 까지
let substring = str[str.startIndex...str.firstIndex(of: "n")!]
|
작은 따옴표 (') 큰따옴표 (")
1
|
print("작은 따옴표는 \' 큰 따옴표는 \" ")
|
비트마스크(Bit Mask)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
let n: Int8 = 0x0f // 0b00001111
let k: Int8 = 60 // 0b00111100
n.nonzeroBitCount // 4
k.nonzeroBitCount // 4
~n // 0b11110000 == -16
~k // 0b11000011 == -61
n & k // 0b00001100 == 12
n | k // 0b00111111 == 63
n ^ k // 0b00110011 == 51
n << 1 // 0b00011110 == 30
k >> 1 // 0b00011110 == 30
n > k ? print(0) : print(1) // 1
|
앱 종료
1
|
exit(0)
|
무한 루프
1
2
3
|
while true {
...
}
|
Do While 문
1
2
3
|
repeat {
....
} while
|
수학(Math) 기본
거듭 제곱
1
2
3
|
import Foundation
pow(2.0, 3.0) // 2.0^3.0 (double type)
pow(2,3) // 2^3 (decimal type)
|
제곱근
1
2
|
sqrt(4.0) // double type
sqrt(16) // double type
|
Decimal Type -> Int Type
1
2
3
4
|
import Foundation
type(of: pow(2.0, 3.0)) // 2.0^3.0 (double type)
type(of: pow(2,3)) // 2^3 (decimal type)
type(of: (pow(2,3) as NSDecimalNumber).intValue) // Int.Type
|
타입별 범위
1
2
3
4
|
Int, Int64 = 2^8 - 1 (9223372036854775807) // 19자리
Int32 = 2^6 - 1 (2147483647) // 10자리
Float = 소수점 6자리까지 표현 가능
Double = 소수점 15자리까지 표현 가능
|
cs |
진수, 진법 변경
1
2
3
4
|
// 10진수 -> 16(N)진법
String(30, radix: 16)
// 2(N)진법 -> 10진수
Int("11100110", radix: 2)!
|
ASCII(아스키)값 찾기
Ascii값 Hex값으로 변환
1
2
|
Character("1").asciiValue!
String(Character("1").asciiValue!, radix: 16)
|
절대 값
1
|
abs(-55) // 55
|
For문에서 원하는 수치만큼 증감이 필요한 경우
to / through 사용
1
2
3
4
5
6
7
8
9
10
11
12
|
import Foundation
stride(from:1, to:5, by:2) // open range..5 불포함 1,3 까지만
stride(from:1, through:5, by:2) // closed range..5 포함 1,3,5까지
for even in stride(from:2, to:100, by:2){
print(even)
}
for odd in stride (from: 99, through: 1, by: -2){
print(odd)
}
|
딕셔너리(Dictionary)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
var dic: [Int:String] = [:]
var dic = [Int:String]()
var dic = [1:"a", 2:"b", 3:"c"]
var aDic: [String: Int] = ["Alex": 31, "Paul": 39]
var aDic: Dictionary<String, Int> = ["Alex": 31, "Paul": 39] // 같은 표현
dic.updateValue("d", forKey: 4) // key가 없으면 nil
dic[4] = "e" // key가 없으면 추가
print(dic)
aDic["Paul"] = 50 // 값. 변경
aDic["Chan"] = 20 // 값 추가
for (key, value) in dic {
print(key) // 1,2,3
print(value) // a,b,c
} // Dictionary는 순서가 없음
dic.removeValue(forKey: 4) // 해당 키값 삭제
dic.removeAll() // 모든 키값 삭제
// Key를 바꿔야하는 경우 삭제 후 추가 해줘야 한다.
var sort = dic.sorted(by: { $0.key < $1.key })
var sort = dic.sorted(by: { $0.value < $1.value })
|
처음 발행 날짜 20210902
마지막 업데이트 날짜 20210916
'🍏 > Swift' 카테고리의 다른 글
[Swift] 배열에 모든 배열이 포함되는지 확인 하는 법. (0) | 2022.07.01 |
---|---|
[Swift] 함수간 걸린시간 측정 / 실행 시간 / 코드 실행 시간 측정 (0) | 2022.06.14 |
[Swift] Int array to Int / Int array to String / 정수형 배열 정수형으로 변환 / 정수형 배열 문자형으로 변환 (0) | 2022.04.27 |
[문법] defer 구문 (0) | 2021.12.15 |
[Swift] While EOF / 백준에서 while 입력 끝 날때까지 받기 / Swift 끝까지 입력 받기 (0) | 2021.09.16 |