상냥한 세상 :: [백준]10952번: A+B-5

본문으로 바로가기

[백준]10952번: A+B-5

category Computer Science/BAEKJOON JAVA Practice 2022. 1. 13. 16:00

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 성능 비교

Scanner 사용
BufferedReader+StringBuilder+StringTokenizer 사용
BufferedReader+StringBuilder+charAt 사용

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

'Computer Science > BAEKJOON JAVA Practice' 카테고리의 다른 글

[백준]1110번: 더하기 사이클  (0) 2022.01.14
[백준]10951번: A+B-4  (0) 2022.01.14
[백준]10871번: X보다 작은 수  (0) 2022.01.13
[백준]2439번: 별 찍기 -2  (0) 2022.01.13
[백준]2438번: 별 찍기 -1  (0) 2022.01.12