오늘부터 Swift로도 백준을 기초부터 풀어볼 예정
기존 알고리즘 공부는 python으로 하고, swift가 손에 익으면 swift로도 도전해봐야겠다.
Swift 이론 공부도 하고 얼레벌레 4장짜리 어플 만들어보기도 했지만 기초부터 백준 차근차근 푸는건 아예 느낌이 다르군...
그때 공부했던게 이 내용이구나 << 이걸 이제와서 느끼는중
특히 옵셔널과 옵셔널 바인딩, 강제 추출 등...
백준 1000번 풀이 1
let input = readLine()!
let numbers = input.split(separator: " ").compactMap{Int($0)}
let (a, b) = (numbers[0], numbers[1])
print(a+b)
백준 1000번 풀이 2
let input = readLine()!
let numbers = input.split(separator: " ").map{Int($0)!}
let (a, b) = (numbers[0], numbers[1])
print(a+b)
두 풀이의 차이는 split으로 나눠진 배열을 처리하는 함수로 map을 썼는지, compactMap을 썼는지의 차이다.
풀이 1은 compactMap을 사용했고, 강제추출(!)을 사용하지 않는 반면, 풀이 2는 map을 사용하고 강제추출(!)을 사용한다.
이는 compactMap은 받아온 배열에서 옵셔널 처리 후 nil을 제외한 결과값을 반환하는 반면, map은 변환 과정과 결과에서 nil을 포함할 수 있기 때문이다.
❗️백준 문제풀이에서는 유효한 값만 들어오는 경우 코드를 간결하게 하기 위해 옵셔널을 강제추출하고 있지만, 실제 어플리케이션 개발에서는 옵셔널 바인딩(if let 또는 guard let)이나 옵셔널 체이닝 등을 통해 안전하게 옵셔널 값을 처리하는 것이 좋다.