스위프트에선 입력방법으로 readLine() 함수를 제공한다.
간단하게 설명하자면 입력받은 것을 Optional String형으로 return하는 함수이다. 여기서 'EOF'란 'End of File'의 약자로 파일의 끝을 의미하는데 터미널에서 엔터가 입력되면 EOF가 처리된다. 즉, 엔터가 입력되면 readLine()이 끝나게 되는 것이다. 이를 사용해 입력하는 예시를 살펴보자.
정수(Int) 한 개 입력받기
let input = readLine()
print(type(of: input))
let inputOut = input!
print(type(of: inputOut))
let intVar = Int(inputOut)
print(type(of: intVar))
let result = intVar!
print(type(of: result))
// 한 줄 요약
let input = Int(readLine()!)!
/* 실행결과
3 << 입력
Optional <String> >> 출력
String >> 출력
Optional <Int> >> 출력
Int >> 출력
예제에서 보듯 Optional String으로 리턴하기 때문에 입력하기 위해선 강제 해제 연산자인 '!'를 붙여주어야한다. Int로 형변환 후에 !를 붙여주는 이유는 Int로 형 변환이 안 이루어지는 경우(abc를 Int형으로 변환) nil 값을 반환해야하기 때문이다.
공백 단위 입력받기
공백을 단위로 입력을 받으려는 경우 split( )함수를 이용하면된다.
let input = readLine()!.split(separator: " ")
print(input)
/* 실행결과
j o s e e << 입력
["j", "o", "s", "e", "e"] >> 출력
입력된 값을 문자열로 바꾸고 나서 " " 기준으로 자르고 배열로 저장한다.
개행 단위 입력받기
let input1 = readLine()!
let input2 = readLine()!
print(input1, input2)
/* 실행결과
hello << 입력
josee! << 입력
hello josee! >> 출력
hello + 엔터에서 1번 readLine()이 끝나고, josee! + 엔터에서 2번 readLine()이 끝나 이를 튜플로 묶어 출력해주면 다음과 같이 출력이 이루어진다.
정수 여러 개 입력받기
정수 여러 개를 입력받을 경우엔 map() 이라는 함수를 이용하면 된다.
map함수에 대해 잠깐 알아보면 map 함수는 데이터를 변형하고자 할 때 사용하는 함수이다. 기존 데이터를 변형하여 새로운 컨테이너를 만드는데, 기존 데이터는 변형되지 않는다는 특징을 가지고 있다. for - in 구문으로도 구현이 가능하지만, map을 사용시 간결성, 재사용성, 컴파일러 최적화의 장점을 가진다.
// for - in 구문 사용
let numArr = [1, 2, 3, 4, 5]
var mulArr = [Int]()
for num in numArr {
mulArr.append(num * 2)
}
print(mulArr)
// [2, 4, 6, 8, 10]
// map 사용
let numArr = [1, 2, 3, 4, 5]
let mulArr = numArr.map( {(number: Int) -> Int in
return number * 2
})
print(mulArr)
// [2, 4, 6, 8, 10]
// 클로저 문법으로 축약
let numArr = [1, 2, 3, 4, 5]
let mulArr = numArr.map { $0 * 2 }
print(mulArr)
// [2, 4, 6, 8, 10]
이런식으로 이용이 가능하다. 정수 여러개를 입력받으려면 다음과 같이 사용하면된다.
let input = readLine()!.split(separator: " ").map { Int($0)! }
print(input)
/* 실행결과
1 2 3 4 << 입력
[1, 2, 3, 4] >> 출력
'Algorithm > 기타' 카테고리의 다른 글
Xcode에서 알고리즘 문제 풀기 전 설정하기 (0) | 2022.05.27 |
---|