본문 바로가기

알고리즘/백준알고리즘

[백준알고리즘-JAVA]10951번 풀이(A+B -4)

안녕하세요

인포돈 입니다.


백준 알고리즘 10951번 풀이입니다. 


* 참고사항
 - 개발환경은 eclipse을 기준으로 작성되었습니다.
 - java언어를 이용하여 문제를 풀이합니다.
 - 알고리즘 문제는 풀이를 보고 해답을 찾는 것도 중요하지만 무엇보다 스스로 풀이를 시도해봐야 합니다!!
(해당 풀이를 보기 전 충분히 문제에 대해 고민해봐야 합니다!)
 - 해당 풀이 말고도 수많은 풀이 방법이 존재합니다.

 


백준 10951 (A+B -4)

 

문제

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

 

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

 

출력

각 테스트 케이스마다 A+B를 출력한다.

 

입력 예시

1 1
2 3
3 4
9 8
5 2

출력 예시

2
5
7
17
7

성공코드

public class Main {

	public static void main(String[] args) {
	
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

			try {
				StringTokenizer st;
				String n = "";
				
				while((n=br.readLine()) != null) {
					st = new StringTokenizer(n);
					if(st.hasMoreTokens()) {
					bw.write(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()) + "\n");
					}else {
						break;
					}
				}

				br.close();
				bw.flush();
				bw.close();
				
			} catch (IOException e) {
				e.printStackTrace();
			}
			}
		}

 

*EOF란 End Of File의 약자로 파일의 끝을 알려주는 일종의 마크라고 생각할 수 있습니다.

 

해당 문제에서 핵심은 바로 EOF처리입니다. 근데 어떻게 EOF가 필요한 문제인지 알아요??라는 의문이 드실 수 있습니다. 해당 문제의 입력을 자세히 보시면, 바로 깨달으실 수 있습니다. "입력은 여러 개의 테스트 케이스로 이루어져 있다." 

 

눈치채셨나요??

 

바로 입력이 끝나는 지점이 없습니다. 그게 무슨 의미냐? 바로 파일의 끝에서 알아서 종료시켜라 바로 EOF처리를 하여라!라는 의미입니다.

 

그렇다면, JAVA에서 어떻게 EOF를 처리할까? 바로 2가지 방법이 있습니다. Scanner와 Bufferedreader를 통해서 EOF를 처리할 수 있죠

 

1. Scanner 이용법

Scanner sc = new Scanner(System.in);

while(sc.hasNextLine()){
	String str = sc.nextLine();
    //statement ~~
}

장점 : 사용하기 편리하다.

단점 : 입력이 많아질 시 느리다.

 

2. Bufferedreader 이용법

Bufferedreader br = new Bufferedreader(new InputStreamReader(System.in));

String str = "";

while((str=br.readLine())!=null){
	//statement~~
}

장점 : 사용하기 어렵다.

단점 : 입력이 많아질 시 빠르다.

 

여기서 EOF의 핵심은 while문의 조건입니다. Scanner에서 sc.hasNextLine() 메서드의 경우 Boolean값을 통해 EOF의 끝을 알려줍니다. 다음 줄이 없다면, false를 반환하죠.

 

Bufferedreader는 br.readLine() 메서드를 통해 null값을 반환받아 EOF의 끝을 알려줍니다. 다음 줄이 없으면, null을 반환해주죠.

 

즉, 각기 다른 값을 반환을 받지만 모두 EOF 파일의 끝을 어떠한 식으로 알려줍니다. 우리는 이러한 점을 활용하여, 우리의 입력이 없을 때는 파일의 끝이라 지정하고, 해당 값들을 이용해 많은 로직을 작성해 볼 수 있다는 것을 알 수 있습니다!

 

*EOF처리는 받아온 입력의 끝을 확인하는 방식입니다. 배열의 끝과는 조금 다르게 볼 필요가 있습니다!