안녕하세요. 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 맥북을 사용 중입니다.*
'알고리즘 > 백준' 카테고리의 다른 글
[JAVA] 백준 - 10825번 국영수 (Comparator 설명 추가!) (0) | 2022.09.16 |
---|---|
[JAVA] 백준 - 11650번 좌표 정렬하기 (0) | 2022.09.15 |
[JAVA] 백준 - 10844번 쉬운 계단 수 (동적계획법 설명 추가!) (0) | 2022.03.17 |
[JAVA] 백준 - 1110번 더하기 사이클 (0) | 2022.01.31 |
[JAVA] 백준 - 15552번 빠른 A+B (0) | 2022.01.28 |