문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)
출력
첫째 줄에 A+B를 출력한다.
Solution 1
- 시간 : 12 ms
- 메모리 : 79,108 KB
- 코드길이 : 133 B
import Foundation
let line = readLine()!
let lineArr = line.components(separatedBy: " ")
print(Int(lineArr[0])! + Int(lineArr[1])!)
Solution 2
- 시간 : 12 ms
- 메모리 : 79,112 KB
- 코드길이 : 131 B
import Foundation
let line = readLine()!
let intArr = line.components(separatedBy: " ").map{ Int($0)! }
print(intArr.reduce(0, +))
Solution 3
- 시간 : 8 ms
- 메모리 : 62,168 KB
- 코드길이 : 73 B
print((readLine()?.split(separator: " ").map { Int($0)! }.reduce(0, +))!)
(+) 백준 맞은 사람 등수 기준 : 시간 > 메모리 > 코드길이
𝐓𝐨𝐝𝐚𝐲 𝐈 𝐋𝐞𝐚𝐫𝐧𝐞𝐝
1. readLine(strippingNewline:)
- 공식문서 developer.apple.com/documentation/swift/1641199-readline
- Function :: Returns a string read from standard input through the end of the current line or until EOF(end-of-file) is reached.
- 현재 줄의 끝까지 또는 파일 끝에 도달할 때까지 표준 입력에서 읽은 문자열을 반환합니다.
- Framework Swift Standard Library
Declaration
func readLine(strippingNewline: Bool = true) -> String?
TIP
- Xcode Command Line Tool을 활용하면 readLine fucntion을 console창에 입력해 실행할 수 있다.
(1) solution 코드를 Run하고
(2) console 창에 "1 2" 값을 입력하고 (따옴표 없이 적어야 한다)
(3) enter를 치면 readLine 실행!
2. components(separatedBy:)
- 공식문서 developer.apple.com/documentation/foundation/nsstring/1413214-components
- Instance Method :: Returns an array containing substrings from the receiver that have been divided by a given separator.
- 주어진 구분 기호로 나눈 부분 문자열들을 포함한 배열을 반환합니다.
- Framework Foundation
Declaration
func components(separatedBy separator: String) -> [String]
3. map(_:)
- 공식문서 developer.apple.com/documentation/swift/array/3017522-map
- Generic Instance Method :: Returns an array containing the results of mapping the given closure over the sequence’s elements.
- 시퀀스의 요소들과 주어진 클로져를 맵핑한 결과가 포함된 배열을 반환합니다.
- Framework Swift Standard Library
Declaration
func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]
Discussion
let cast = ["Vivien", "Marlon", "Kim", "Karl"]
let lowercaseNames = cast.map{ $0.lowercased() }
// 'lowercaseNames' == ["vivien", "marlon", "kim", "karl"]
let letterCounts = cast.map { $0.count }
// 'letterCounts' == [6, 6, 3, 4]
map function closure 과정
// start
let lowercaseNames = cast.map({
(cast: String) -> String in
return cast.lowercased()
})
// step.1 반환값의 타입 생략 (컴파일러가 추론)
let lowercaseNames = cast.map({
(cast: String) -> String in
return cast.lowercased()
})
// step.2 매개변수의 타입 생략 (컴파일러가 추론)
let lowercaseNames = cast.map({
(cast: String) in
return cast.lowercased()
})
// step.3 매개변수 생략, 내부 상수 이용 (인자값의 순서대로 $0, $1)
let lowercaseNames = cast.map({
cast in return cast.lowercased()
})
// step.4 실행구문(in) 생략
let lowercaseNames = cast.map({
in return $0.lowercased()
})
// step.5 return 구문 생략 (컴파일러 추론)
let lowercaseNames = cast.map{
return $0.lowercased()
}
// final
let lowercaseNames = cast.map{ $0.lowercased() }
4. reduce(_:_:)
- 공식문서 developer.apple.com/documentation/swift/array/2298686-reduce
- Generic Instance Method :: Returns the result of combining the elements of the sequence using the given closure.
- 주어진 클로져를 사용해 시퀀스의 요소들을 합친 결과를 반환한다.
- Framework Swift Standard Library
- Complexity: O(n), where n is the length of the sequence.
Declaration
func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
Discussion
1) 클로져(Closure) 이용
let numbers = [1, 2, 3, 4]
let numberSum = numbers.reduce(0, { x, y in
x + y
})
// numberSum == 10
2) 연산자 함수 (Operator Functions) 이용
클로저 표현식보다 더 간결하게 표현할 수 있는 방법. 연산자만을 사용하여 의미하는 바를 정확히 나타낼 수 있을 때 사용된다.
let numbers = [1, 2, 3, 4]
let numberSum = numbers.reduce(0, +)
// numberSum == 10
5. split(separator:maxSplits:omittingEmptySubsequences:)
- 공식문서 developer.apple.com/documentation/swift/string/2894564-split
- Instance Method :: Returns the longest possible subsequences of the collection, in order, around elements equal to the given element.
- 주어진 요소와 동일한 요소 주위의 컬렉션에서 가장 긴 하위 시퀀스를 순서대로 반환합니다.
- Framework Swift Standard Library
- Complexity: O(n), where n is the length of the collection.
Declaration
func split(separator: Character, maxSplits: Int = Int.max, omittingEmptySubsequences: Bool = true) -> [Substring]
Parameters
- separator
The element that should be split upon.
- maxSplits
The maximum number of times to split the collection, or one less than the number of subsequences to return. If maxSplits + 1 subsequences are returned, the last one is a suffix of the original collection containing the remaining elements. maxSplits must be greater than or equal to zero. The default value is Int.max.
- omittingEmptySubsequences
If false, an empty subsequence is returned in the result for each consecutive pair of separator elements in the collection and for each instance of separator at the start or end of the collection. If true, only nonempty subsequences are returned. The default value is true.
Discussion
The resulting array consists of at most maxSplits + 1 subsequences. Elements that are used to split the collection are not returned as part of any subsequence.
The following examples show the effects of the maxSplits and omittingEmptySubsequences parameters when splitting a string at each space character (” “). The first use of split returns each word that was originally separated by one or more spaces.
let line = "BLANCHE: I don't want realism. I want magic!"
print(line.split(separator: " "))
// Prints "["BLANCHE:", "I", "don\'t", "want", "realism.", "I", "want", "magic!"]"
The second example passes 1 for the maxSplits parameter, so the original string is split just once, into two new strings.
print(line.split(separator: " ", maxSplits: 1))
// Prints "["BLANCHE:", " I don\'t want realism. I want magic!"]"
The final example passes false for the omittingEmptySubsequences parameter, so the returned array contains empty strings where spaces were repeated.
print(line.split(separator: " ", omittingEmptySubsequences: false))
// Prints "["BLANCHE:", "", "", "I", "don\'t", "want", "realism.", "I", "want", "magic!"]"
'Dev > Algorithm' 카테고리의 다른 글
Swift Algorithm :: 백준 2557번, 10718번, 10171번, 10172번 입출력 관련 알고리즘 풀이 (0) | 2021.01.18 |
---|---|
Swift Algorithm :: 백준 1008번 A/B 알고리즘 풀이 (+ TIL, Today I Learned) (0) | 2021.01.07 |
Swift Algorithm :: 백준 10998번 AxB 알고리즘 풀이 (+ TIL, Today I Learned) (0) | 2021.01.06 |
Swift Algorithm :: 백준 1001번 A-B 알고리즘 풀이 (0) | 2021.01.05 |