https://www.acmicpc.net/problem/10952
10952번: A+B - 5
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
- 문제

입력으로 두개의 정수를 받고 (공백을 기준으로 나눠야 하니 split이나 StringTokenizer이 필요할수도 있다)
출력문에는 그 두 정수의 합을 출력한다.
단, 0을 두번 입력했을 경우 테스트를 종료한다.
- 코드 1
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
while(true){
int A=in.nextInt();
int B=in.nextInt();
if(A==0 && B==0){
in.close();
break;
}
System.out.println(A+B);
}
}
}
0 0을 입력하면 종료하는걸 감지는 조건문 if에 A와 B의 입력이 0으로 들어왔을경우 입력을 종료하고 break로 while 의 loop를 종료하게 설정하면된다.
- 결과

- 코드 2
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StingTokenizer 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);
}
}
loop문 안에 StringTokenizer을 선언해주게 되면 br.readLine()으로 읽어들인 다음 공백을 기준으로(스페이스바 눌러줘야함) 선언된 변수의 개수만큼(A,B선언 했으니 숫자 2번만 입력가능) 입력하게 해준다. 이후 엔터를 누르면 줄이 바뀌면서 계속 새로운 숫자를 입력할 수 있게 된다.
숫자 스페이스바 숫자 엔터
숫자 스페이스바 숫자 엔터
숫자 스페이스바 숫자 엔터
0 스페이스바 0
loop종료
출력
이런방식으로 동작하게 되는 셈이다.
- 결과

- 코드 3
https://kindstudent.tistory.com/56
[백준]2588번: 곱셈
문제 이번엔 '곱셈'이 아니라 '곱셈과정'을 전개하는거와 같다. 472와 385를 곱했을때 바로 181720이 나오는게 아닌, 그 중간중간에 어떻게 곱셈이 이루어지고 있는지를 코드로 보여주어야한다. (1)
kindstudent.tistory.com
좀 더 효율적인 코드작성을 위해 Integer.parseInt(sb.nextToken()); 이 아닌, charAt을 사용할것이다. 관련 설명은 이전포스팅 2588번을 참고하면 좋다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb=new StringBuilder();
while(true){
//한줄단위로 '문자열' String으로 읽는다.
String str=br.readLine();
//-48 또는 -'0'
int A=str.charAt(0)-48;
int B=str.charAt(2)-48;
if(A==0&& B==0){
break;
}
sb.append((A+B)).append('\n');
}
System.out.println(sb);
}
}
- 결과

- 코드 1, 2 성능 비교



BufferedWriter은 규모가 큰 출력에는 빠르지만, 보통 하나의 문자열로 묶어서 스트림으로 보낼땐 StringBuilder을 사용하는게 일반적이다. BufferedWriter의 버퍼에 담아두었다 출력을 하는거나 append에 담아서 보내거나 사실 큰차이는 없다.