Swift) 백준 #1000번 : A + B

eelijus·2022년 3월 3일
0

백준

목록 보기
1/2
post-thumbnail

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

1️⃣

import Foundation

let line = readLine()!
let lineArr = line.split(separator: " ")

let a = Int(lineArr[0])!
let b = Int(lineArr[1])!

print(a + b)

2️⃣

import Foundation

let line = readLine()!
let lineArr = line.components(separatedBy: " ")

print(Int(lineArr[0])! + Int(lineArr[1])!)

연관 문법

옵셔널에 대하여

! : 옵셔널 강제추출. 답 코드에서 만약 readline()값이 nil이라면 코드가 터진다.
if let을 사용해 코드를 안전하게 바꿔보자

  • 예시 코드
import Foundation

var myName: String? = "sujilee" //myName은 옵셔널타입. "sujilee"로 초기화
var yourName: String? = nil //yourName은 옵셔널타입. nil로 초기화

if let name = myName, let friend = yourName {
    print("\(name) and \(friend)")
} else {
    print("some nil is bothering you")
}
//OUTPUT : some nil is bothering you

yourName = "sean" //nil이었던 yourName에 "sean" 값을 할당

if let name = myName, let friend = yourName {
    print("now \(name) and \(friend)")
}
//OUTPUT : noew sujilee and sean
  • 적용 코드
 import Foundation

var line  = readLine() //readLine()은 String? 을 반환한다.

//lineArr에 대한 nil가드
if let lineArr = line?.split(separator: " ") {
    //a와 b에 대한 nil가드
    if let a = Int(lineArr[0]), let b = Int(lineArr[1]) {
        print(a + b)
    } else {
        print("case 2 : a b both nil")
    }
} else {
    print("case 1 : realine nil")
}

realine으로 nil이 들어오는 경우가 궁금해 프로그램 실행 후 프롬프트에 아무것도 입력하지 않고 엔터를 쳐봤다. 결과가 꽤 흥미로웠음

뻑은 a, b에서 났다. 이유는 Index out of range
lineArr는 지금 빈 문자열, [] 상태이다.
그런데 인덱스 0과 1에 접근하려고 하니 에러가 발생한 것. lineArr에 nil이 들어갈 줄 알았던 예상과 달랐고, 왜 readline()을 옵셔널 강제추출로 할당하는지 납득했다. 애초에 readline에는 nil이 들어갈 일이 없다!

profile
sujileelea

0개의 댓글

관련 채용 정보