728x90
반응형
SMALL
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
입력의 마지막에는 0 두 개가 들어온다.
출력
각 테스트 케이스마다 A+B를 출력한다.
예제 입력 1 복사
1 1
2 3
3 4
9 8
5 2
0 0
예제 출력 1 복사
2
5
7
17
7
풀이
import Foundation
final class FileIO {
private var buffer:[UInt8]
private var index: Int
init(fileHandle: FileHandle = FileHandle.standardInput) {
buffer = Array(fileHandle.readDataToEndOfFile())+[UInt8(0)] // 인덱스 범위 넘어가는 것 방지
index = 0
}
@inline(__always) private func read() -> UInt8 {
defer { index += 1 }
return buffer.withUnsafeBufferPointer { $0[index] }
}
@inline(__always) func readInt() -> Int {
var sum = 0
var now = read()
var isPositive = true
while now == 10 || now == 32 { now = read() } // 공백과 줄바꿈 무시
if now == 45{ isPositive.toggle(); now = read() } // 음수 처리
while now >= 48, now <= 57 {
sum = sum * 10 + Int(now-48)
now = read()
}
return sum * (isPositive ? 1:-1)
}
@inline(__always) func readString() -> String {
var str = ""
var now = read()
while now == 10 || now == 32 { now = read() } // 공백과 줄바꿈 무시
while now != 10 && now != 32 && now != 0 {
str += String(bytes: [now], encoding: .ascii)!
now = read()
}
return str
}
}
let file = FileIO()
var result = 1
func solution() {
let a = file.readInt(), b = file.readInt()
result = a + b
if a + b != 0 { print(result) }
}
while result != 0 {
solution()
}
- 빠른입력때 사용하고 분석했던 FileIO 클래스를 활용했다.
- 문제는 한번에 여러가지 입력을 받고 모두 처리하는 것을 요구하기 때문이다.
728x90
반응형
LIST
'Algorithm' 카테고리의 다른 글
[알고리즘] 기초 : 백준 10807번 갯수 세기 (0) | 2023.10.06 |
---|---|
[알고리즘] 기초 : 백준 : 10951번 : EOF (0) | 2023.10.05 |
[알고리즘] 기초 : 백준 : 별찍기 1 2438번 (0) | 2023.10.04 |
[알고리즘] 기초: 백준 : 빠른입력 (1) | 2023.10.03 |
[알고리즘] 기초 : 백준 반복문 : 코딩은 체력테스트 25314번 (0) | 2023.10.03 |