오늘은 Algorithm 문제를 풀면서 많이 사용되는 것들을 정리해보려 합니다.
이 내용들은 추가할 내용이 생길 때마다 업데이트할 예정입니다 :)
값 입력 프로젝트 생성
swift 언어로 알고리즘을 풀 경우에는(특히 백준 알고리즘의 값을 입력받아야 하는 경우) readLine()을 사용해야 합니다. 그렇기에 그게 가능한 Command Line Tool로 프로젝트를 생성하면 됩니다.
키보드 값 입력받기
var input = readLine() // return 값은 Optional String 형식
var input = readLine()! // return 값은 String 형식
Int 값 입력받기
var input = Int(readLine()!)! // return 값은 Int
var input = Int(String(readLine()!))! // 위보다 조금 더 속도가 빠르다고함
입력 값 공백으로 구분
- split()으로 구분 (예시: 1 2 3 4)
var nums = readLine()!.split(seperator: " ") // ["1", "2", "3", "4"]
- components로 구분 (예시: 1 2 3 4)
var nums = readLine()!.components(separatedBy: " ") // ["1", "2", "3", "4"]
코드 예시로는 다를 게 없어 보이지만, components()를 사용할 경우에는 Foundation을 import를 해주어야 하지만, split() 함수는 Swift Standard library에 속해있기 때문에 별도로 Foundation을 import 해주지 않아도 됩니다.
자세한 내용은 다음에 자세히 정리해서 포스팅할 예정입니다 :)
N 개의 줄 만큼 입력받기
var N = Int(readLine()!)!
var lines = [Int]()
for _ in 0..<N { lines.append(Int(readLine()!)!) }
print(lines)
// 입력
// 4 (N개의 줄 개수)
// 5
// 7
// 2
// 9
// 출력: [5, 7, 2, 9]
배열 생성
let arr = [Int]() // 개인적으로 위의 방법을 선호
let arr: Array<Int>
let arr = [Int](repeating: 2, count: 5)
let arr = Array(repeating: 2, count: 5)
// 출력) [2, 2, 2, 2, 2]
let arr = [String](repeating: "Z", count: 4) // 이처럼 다른 데이터 타입도 가능함
// 출력) ["Z", "Z", "Z", "Z"]
2차원 배열 생성
let arr = [[Int]]() // 빈 2차원 배열
let arr = [[Int]](repeating: Array(repeating: 2, count: 3), count: 4)
let arr: [[Int]] = Array(repeating: Array(repeating: 2, count: 3). count: 4)
// 출력) [[2, 2, 2], [2, 2, 2], [2, 2, 2], [2, 2, 2]]
임의의 Data 넣어서 생성
let arr = Array(1...5)
// 출력) [1, 2, 3, 4, 5]
배열 역순으로 출력
let reversed()
arr = arr.reversed()
배열 정렬
// 오름차순. default도 오름차순. (1, 2, 3, 4, ...)
arr.sort()
arr.sort(by: <)
arr.sorted(by: <)
// 내림차순. (..., 4, 3, 2, 1)
arr.sort(by: >)
arr.sorted(by: >)
고차함수
map
let string = ["1", "2", "3", "4"]
string.map { Int($0)! }
// [1, 2, 3, 4] 각 원소를 전부 Int로 맵핑
filter
let arr = [1, 2, 3, 4]
arr.filter { $0 % 2 == 0 }
// [2, 4] 조건에 맞는 수만 filtering 하여 걸러냄
reduce
let arr = [1, 2, 3, 4]
arr.reduce(0, +)
// 1, 2, 3, 4를 다 더한 10의 값. 문자열 합치기도 가능함
고차 함수에 대한 자세한 내용을 알고 싶다면, 고차함수 이 글에서 확인해주세요 :)
무한 루프
while true {
...
}
아스키코드(ASCII) 변환
// Character to Ascii
Character("a").asciiValue! // return 타입은 UInt8 이며, 값은 97
// Ascii to Chacter, String
let char = Character(UnicodeScalar(65)) // A
let str = String(UnicodeScalar(97)) // a
절댓값 변환
abs(-31) // 31
abs(31) // 31
print 줄 바꿈 안 하기
for i in 1...5 {
print(i, terminator: " ")
}
// 1, 2, 3, 4, 5
print 중간에 값 넣기
print("my", "name", "is", "Miro", separator: "___")
// 출력: my___name___is___Miro
for 문과 stride( ) 함수
let input = Int(readLine()!)!
for i in stride(from: input, to: 0, by: -1) {
print(i, terminator: " ")
}
// 입력(input): 5일 경우
// 출력 : 5 4 3 2 1
for i in stride(from: input, through: 0, by: -1) {
print(i, terminator: " ")
}
// 입력(input): 5일 경우
// 출력: 5 4 3 2 1 0
위, 아래의 for문의 차이점은 to이냐, through이냐의 차이입니다.
자세한 내용을 알고 싶다면 stride() 함수 이 글에서 확인해주세요 👍
공부하며 정리한 내용이기 때문에, 틀린 내용이 있을 수 있습니다.
틀린 내용이 있다면 댓글로 알려주시면 감사하겠습니다 😋