Swift로 백준 문제를 풀며 필요한 내용을 정리하였습니다.
기본 문자열 입력받기
var inputValue1 = readLine()! // String형
readLine()은 한줄을 입력받으며, 입력받은 문자는 Optional< String >타입으로 변수에 담긴다. 그래서 위의 예제는 입력받는 시점에 느낌표(!)를 붙여 강제추출을 해주거나, 아니면 변수를 사용할 때 언래핑을 해주면된다.
정수 입력받기
var inputValue2 = Int(readLine()!)! // Int형
입력값을 정수로 변환하는 경우에는 한번더 !를 이용해 Optional< Int >를 Int로 변경해준다.
입력값을 공백으로 구분하기
1 2 3과 같이 공백을 기준으로 정수값을 입력할때
cat dog lion과 같이 공백을 기준으로 문자열값을 입력할때
split()과 map() 활용
// String
var input = readLine()!.split(separator: " ").map{ String($0) }
print(input) // cat dog lion 입력시 ["cat", "dog, "lion"] 출력
// Int
var input = readLine()!.split(separator: " ").map{ Int($0)! }
print(input) // 1 2 3 입력시 [1, 2, 3] 출력
split(separator:)의 반환값은 Array< Substring >이다. Substring은 말그대로 문자열(String)의 일부분을 담고 있는 자료형으로 메모리의 일부를 재사용하여 효율성을 높여준다. 하지만 값의 재사용을 위해 String으로 변환하여 사용해야 한다. 따라서 map()을 이용해 문자열(String) 자료형으로 변환하여 사용한다.
components와 map() 활용
Foundation 프레임워크의 components(separatedBy:)를 이용할 수도 있다. 이 경우에는 Foundation 프레임워크를 가져와야 하기 때문에 소스코드의 크기가 커진다.
import Foundation
// String
var input = readLine()!.components(separatedBy: " ").map{ String($0) }
print(input) // cat dog lion 입력시 ["cat", "dog, "lion"] 출력
// Int
var input = readLine()!.components(separatedBy: " ").map{ Int($0)! }
print(input) // 1 2 3 입력시 [1, 2, 3] 출력
기본 값으로 배열 생성
배열의 크기와 초기화를 할 수 있다.
var intArr = [Int](repeating: 0, count: 3)
// var intArr = Array(repeating: 0, count: 3) 위와 같음
print(intArr) // [0, 0, 0]
// 배열크기가 3인 Int타입 0으로 초기화
var stringArr = [String](repeating: "", count: 3)
// var stringArr = Array(repeating: "", count: 3) 위와 같음
print(stringArr) // ["", "", ""]
// 배열크기가 3인 String타입 ""으로 초기화