Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩
Algorithm Study/PS

[Swift] 백준 1000번 A+B

by Toughie 2023. 4. 13.

터피의 야금야금 알고리즘

 

 

import Foundation

let input = readLine()!
let result = print(input.components(separatedBy: " ").map { Int($0)!}.reduce(0, +))

입력값을 공백을 기준으로 나눌 때

.split을 쓸 수도 있는데,

.split은 Swift 표준 라이브러리에 있어서 import Foundation을 안 해도 되는 장점이 있다.

또한 separator 이외에 다양한 파라미터가 존재한다.

return 타입은 [SubString]이다. 

 

 

.components는 import Foundation이 필요하다.

파라미터는 separatedBy 딱 하나다.

return 타입은 [String]이다.

 

이 문제에서는 정수리터럴이 입력값으로 들어오기 때문에, 큰 상관은 없지만

문자열 처리할 때는 두 메서드의 차이를 이해하고 사용할 필요가 있어 보인다.

 

강제언래핑을 사용하는 것은 앱을 만들 때는 매우 지양해야 하지만..

알고리즘 문제에서는 입력값이 무조건 주어지기 때문에

readLine()!의 형태를 사용했고

.components를 통해 공백을 기준으로 입력값을 나누면 ["1", "2"] 배열이 리턴된다.

 

현재는 String이기 때문에 이를 Int로 바꿔주는 과정을 .map을 사용했다.

(배열의 각 아이템 매핑)

 

그리고 배열의 각 요소를 정수로 변경해서 print(A + B)와 같은 형태도 가능하겠지만,

계속해서 배열을 이용하려는 목적으로

.reduce()를 통해 합을 구해주는 풀이 방식이다 :)

 

https://developer.apple.com/documentation/swift/readline(strippingnewline:) 

 

readLine(strippingNewline:) | Apple Developer Documentation

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

developer.apple.com

readLine의 리턴형은 Optional String이다. -> 언래핑 필요하다는 말.

(위에서도 말한 것처럼, 알고리즘 문제에서는 input이 들어오는 것이 확실하기 때문에 강제 언래핑을 하는 것)

 

정답 코드가 무조건 짧다고 좋은 것은 아니라 생각하지만..

가능하면 최대한 컴팩하게 작성하는 연습을 하는 것도 필요하지 않을까? 라는 생각이 든다.

물론 나중에 정말 알고리즘으로 들어가면 시간복잡도도 고려를 해야겠지만..