728x90
10871번 문제는 사실상 3월 28일(월)에 푼 문제이고... 오늘은 2문제(10952번, 10951번)를 풀었는데 매우 힘들다...
살짝만 꼬여도 문제 해결에 필요한 시간이 배로 늘어나는 것 같다.
* 10952번
1)
var a: [Int] = []
a = readLine()!.split(separator: " ").map{Int($0)!}
for _ in 0... {
if a[0] > 0 && a[1] > 0 {
print(a[0] + a[1])
a = readLine()!.split(separator: " ").map{Int($0)!}
} else if a[0] == 0 && a[1] == 0 {
break
}
}
- 첫 번째로 for문을 어떻게 무한정 돌리는지에 대해 고민하는 시간을 가졌다. 내가 내린 결론은 0부터 정해진 수 없이 쭉 for문이 돌아가도록 기준을 만들자는 것이었고 if문이 다시 돌아갈때마다 a를 재정의하여 값을 받을 수 있도록 하였다.
- 두 번째로 처음엔 0 0 을 입력하는 의미를 잘 몰랐는데, 생각해보니 0 0을 입력했을 경우 입출력이 전부 종료되었다는 말이라고 이해하여 0 0 기입시 break로 for구문을 빠져나갈 수 있도록 작성하여 보았다.
- 이와 관련하여 꽤 오랜 고민을 했고 그리 좋은 코드 같지 않아 다른 분들 것도 좀 조사해 보았다.
2)
import Foundation
while let a = readLine() {
let b = a.components(separatedBy: " ")
print(Int(b[0])! + Int(b[1])!)
}
3)
while let a = readLine() {
var arr = a.split(separator: " ")
var b = Int(arr[0])!
var c = Int(arr[1])!
print(b+c)
}
- 공통적으로 while을 사용하는 경우가 훨씬 깔끔하게 결과가 나오는 것 같다. 너무 for문에 생각이 갖혀있진 않았나 반성한다.
* 10951번
1)
import Foundation
while let a = readLine(){
print(a.split(separator: " ").map{ Int($0)! }.reduce(0, +))
}
- 일단 10951번 문제를 풀때 문제에 관해서 입력, 출력 조건 등에 대해서만 신경을 써서 도대체 이게 무슨 차이고 어떤 결과를 구해야할지 감이 잘 안갔다.
- 입력 할때마다 출력이 매번 나와야했는데 그 전 문제인 10952번처럼 break에 대한 조건이 주어진 것도 아니고... 그럼 그냥 계속 돌아갈 수 있도록 만들라는 건가? 라는 생각을 했다.
- 그래서 처음 10952번에서 사용했던 코드에 break문을 지우고 제출하였더니 아래와 같이 런타임 에러가 발생하였다.
- 그래서 이런저런 시도를 한 끝에 결국 서칭을 해보니 이 문제는 EOF에 대해 아는 문제인지를 확인하는 문제였다고 한다.
- 찾아보니 EOF란 end of file, 말 그대로 파일의 끝을 의미한다고 한다.
- readLine()은 EOF가 들어오기 전의 입력을 Optional Sring형으로 리턴하는데, Swift 터미널 input에서는 엔터가 입력되면 EOF 처리가 된다고 한다.
- 10951 문제의 경우 EOF를 알아보세요가 문제의 요지이긴한데,
- 단순히 그 의미에서 끝나는게 아니고 결국 while문이든 for문이든 사용했을 경우 true of false의 boolean값을 이용하여 구문을 종료할 수 있는 기능이 들어가야하는 것 같다.
- 위의 코드도 결국 공백에 엔터가 쳐도 구문이 종료되지 않고, String 값을 입력한다던지 해야 구문 자체적으로 오류? False?의 값을 반환하여 구문이 종료되는 것 같다.
정리(Today I Learned)
- EOF란 무엇인가.
- 단순 반복, break문 사용하기에 while문도 상당히 좋다!
- break문 뿐만 아니라 while, for문 자체적으로 오류를 발생시키는 방식으로 구문을 종료시킬 수도 있다.
'TIL > 알고리즘 공부' 카테고리의 다른 글
백준 10818, 2562번 Swift 알고리즘 연습 (2) | 2022.03.31 |
---|---|
백준 1110번 Swift 알고리즘 연습 (2) | 2022.03.30 |
백준 10871번 Swift 알고리즘 연습 (0) | 2022.03.29 |
백준 2438, 2439번 Swift 알고리즘 연습 (0) | 2022.03.25 |
백준 11021, 11022번 Swift 알고리즘 연습 (0) | 2022.03.25 |