적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Algorithm/Baekjoon

[Swift 알고리즘] 백준 1000번 A+B

hongssup_ 2021. 4. 5. 23:26
반응형

Swift로 알고리즘 입문!

확실히 알고리즘같은 걸 공부하기엔 파이썬이 훨씬 편했던 것 같다.. 자주 사용하는 함수들이나 프로그램 자체가 Swift는 프론트 개발에 맞춰있어서 알고리즘 문제를 풀기엔 간단한 문제라도 아주 낯선느낌..? ㅎㅎㅎ

첫번째 난관은 입력 받아오기!

플레이그라운드에서는 입력 받아오는 게 불가하고, 새로운 Xcode 프로젝트를 생성할 때, macOS 의 Command Line Tool 을 사용해야만 console 창에 값을 입력할 수 있다고 한다. 

 

백준 1000번 <A+B>

문제 : 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력 : 첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력 : 첫째 줄에 A+B를 출력한다.

 

readLine()으로 입력을 받아와 배열로 나눠주는 방법에는 components(seperatedBy: _)와 split(seperator: _) 이렇게 두가지가 있는데, c전자의 경우 import Foundation을 해주어야 하고, 후자의 경우에는 따로 안해줘도 된다고 한다. 

근데 막상 실행해보니 import Foundation을 하지 않는 것이 실행 시간은 훨씬 빠른 것 같다.  

import Foundation

let line = readLine()!
let lineArr = line.components(separatedBy: " ")
let a = Int(lineArr[0])!
let b = Int(lineArr[1])!
print(a+b)

위의 코드는 12m, 아래는 4m

let input = readLine()!
let lineArr = input.split(separator: " ")
let a = Int(lineArr[0])!
let b = Int(lineArr[1])!
print(a+b)

 

import Foundation
 
let line = readLine()!
let intArr = line.components(separatedBy: " ").map{ Int($0)! }
print(intArr.reduce(0, +))

 

print((readLine()?.split(separator: " ").map { Int($0)! }.reduce(0, +))!)

 

readLine(strippingNewline:)

: 표준 입력에서 읽어들인 문자열을 반환하는 함수. (현재 줄의 끝까지 or 파일 끝에 도달할 때까지)

Returns a string read from standard input through the end of the current line or until EOF(end-of-file) is reached. 

func readLine(strippingNewline: Bool = true) -> String?

리턴값이 옵셔널이기 때문에 force unwrapping해주거나 안전하게 if let을 사용하여 optional binding을 해주어야 한다. 

components(seperatedBy:)

: 주어진 구분 기호로 나누어진 문자열들을 포함한 배열을 반환하는 함수. 

Returns an array containing substrings from the receiver that we have been divided by a given separator

func components(separatedBy separator: String) -> [String]

 

map(_:)

Returns an array containing the results of mapping the given closure over the sequence's elements. (Generic Instance Method)

func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]

 

reduce(_:_:)

: 주어진 클로저에 따라 element들을 하나의 값으로 통합하는 함수. 

Returns the result of combining the elements of the sequence using the given closure.

func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result

 

728x90
반응형