일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- memoryDB
- 프로그래머스
- 쿼리
- SQL
- 다중기본키
- CrossSiteScripting
- 가상머신
- PHP
- mysql
- oracle
- 데이터베이스
- VMWare
- 람다식함수
- 트리플DES
- 자바스크립트
- 자동증가열
- C#
- 코딩테스트
- db
- 다중pk
- 오라클
- windows7
- 스프링부트
- springboot
- 이미지엑박
- mssql
- ASP
- javascript
- ascx.cs
- HTML
- Today
- Total
개발바닥 아방수
백준 10951 A+B - 4 | 간단한 입출력 | EOF 라는 함정 본문
간단하지만 EOF(End of File) 라는 함정이 있는 문제였다.
여기서 EOF(End of File)란 파일이나 데이터 스트림에서 더 이상 읽을 데이터가 없음을 나타내는 신호를 의미한다.
파일의 끝에 도달했거나 데이터 스트림의 끝에 도달하여 더 이상 읽을 내용이 없을 때 사용된다.
EOF는 파일 또는 데이터 스트림의 끝에 도달하면 일반적으로 파일을 읽거나 데이터를 처리하는 프로그램에서 사용되는 특별한 값을 나타낸다.
이것은 프로그램에게 더 이상 데이터를 읽을 필요가 없음을 알려준다.
예를 들어, 파일을 읽을 때 EOF를 감지하여 파일의 끝에 도달했을 때 읽기 작업을 중지하고 처리를 종료할 수 있다.
나의 경우 Java로 문제를 풀었는데,
Java의 경우 `BufferedReader`를 사용하여 입력을 받을 때 EOF(End of File)를 감지하는 방법은
보통 `readLine()` 메서드를 사용하여 null을 반환하는 경우로 판단한다고 한다.
`readLine()` 메서드는 더 이상 읽을 데이터가 없으면 null을 반환하므로 이를 통해 EOF를 감지할 수 있는 것이다.
간단한 예시 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class InputExample {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
String line;
System.out.println("Enter lines of text (type 'exit' to quit):");
while ((line = reader.readLine()) != null) {
if (line.equalsIgnoreCase("exit")) {
break; // Exit loop if 'exit' is typed
}
// Process the input line
System.out.println("You entered: " + line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
이 예시 코드에서는 사용자가 텍스트를 입력할 때까지 계속 입력을 받는다.
사용자가 "exit"를 입력하면 입력이 종료되고 프로그램이 종료된다.
`readLine()`이 null을 반환하는 경우에 입력이 끝났음을 인식하여 처리할 수 있다.
이와 같은 EOF 감지 방법으로 해당 문제를 풀어보면 다음과 같다.
import java.io.*;
import java.util.*;
public class Main_10951 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line;
while((line = br.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line);
int answer = 0;
while(st.hasMoreTokens()) {
answer += Integer.parseInt(st.nextToken());
}
System.out.println(answer);
}
}
}
처음에는 무작정 while문 안에 true를 넣었는데, 이러한 사소한 경우까지도
생각해서 코딩하는 게 중요하겠다!