본문 바로가기

알고리즘/백준

[JAVA] 백준 - 10952번 A+B, 10951번 A+B

반응형

안녕하세요. pitang입니다.

백준 10952번과 10951번 while문을 사용해 A+B를 출력하는 문제를 풀어보도록 하겠습니다.

 

두 문제의 차이점은 하나는 0 0을 입력받았을 때 출력하고, (이 문제는 바로 생각이 났지만)

하나는 입력받은 값이 없었을 때 출력한다. (이 문제는 바로 생각이 나지 않았다.)

 

10952번 A+B

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

 

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

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

입력의 마지막에는 0 두개 가 들어온다.

 

-> A와 B가 0일때, while문을 break 하는 방식이 떠올랐다.


풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();
		
		while(true) {
			st = new StringTokenizer(br.readLine(), " ");
			int A = Integer.parseInt(st.nextToken());
			int B = Integer.parseInt(st.nextToken());
			
			if (A == 0 && B == 0) {
				break;
			}
			
			sb.append((A+B)).append("\n");
			
		}
		System.out.println(sb);
        
        br.close();
		
	}
	
}

-> 입력은 BufferedReader.readLine()으로 받는다.

      문자열 분리를 위해 StringTokenizer을 생성과 동시에 입력받고

      반환되는 타입이 String이므로 Integer.parseInt를 통해 int형으로 바꿔준다. 

      StringBuilder에 값을 저장해주었다 마지막에 출력해주었다.

 

-> 132ms의 시간이 걸리고 코드 길이는 682B이다.

 

10951번 A+B

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

 

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

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

 

-> 종료시점을 알지 못해 처음 생각이 잘 나지 않았다.


풀이

이 문제는 종료 조건이 없고 입력에서 더 이상의 읽을 수 있는 데이터가 존재하지 않을 때 종료된다.

-> EOF (End Of File) 파일의 끝, 더 이상 읽을 데이터가 없는 것을 나타내는 단어이다. 

 

Scanner 사용시, 예외를 던져 처리하거나 hasNext() 메서드를 통해 처리할 수 있다.

BufferedReader 사용시, null을 반환할 때 반복문 종료로 처리할 수 있다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();
		String str = "";
		
		while((str=br.readLine()) != null) {
			st = new StringTokenizer(str, " ");
			
			int A = Integer.parseInt(st.nextToken());
			int B = Integer.parseInt(st.nextToken());
			
			sb.append((A+B)).append("\n");
			
		}
		System.out.println(sb);
		
		br.close();
		
	}
	
}

-> str을 선언해주고, str=br.readLine() 이 null이 아닐 때까지 반복문을 돌리도록 조건을 세워주었다.

 

-> 132ms의 시간이 걸리고 코드 길이는 672B이다.

 

 

감사합니다.

 

*m1 맥북을 사용 중입니다.*

 

 

728x90
반응형