알고리즘/백준

백준 | 10950 - A+B - 3 (Java)

유하 yuha 2021. 10. 7. 17:19

➕ A+B - 3

10950번을 3가지 방법을 사용해서 풀어봤다.

 

 


✏️ 문제

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

 

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

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

 

출력

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

 

 


💡 해결방법

처음 자바 시작할 때, 입력받는건 무조건 scanner로 배웠다. (그땐 시간 단축해야한다는 개념X 알고리즘 공부가 아니었으니까)

알고리즘 공부 시작하고, 자바를 쓰기 시작하면서 BufferedReader를 처음 배웠다. 단순히 입력을 1~2개만 받는 문제를 풀다가 엔터까지 고려야해 하는 상황이 발생했다.

 

5
1 1
2 3
3 4
9 8
5 2

입력 형식은 위와 같았고, StringTokenizer 사용해서 " " 을 구분할 수 있었지만 엔터는 그냥 string으로 인식할텐데? 라는 생각에 도대체 어떻게 구분해야하지? 생각하며 코드를 짜기 시작했다.

 

👩🏻‍💻 소스코드1 : Scanner 사용

import java.util.Scanner; // Scanner사용

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        int i;
        for (i=0;i<t;i++) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            System.out.println(a+b);
        }
    }
}

가장 일반적이지만, 메모리와 시간이 많이 소요된다. 시간 단축을 위해 BufferedReader를 사용하고 싶었다.

👩🏻‍💻 소스코드2 : BufferedReader사용(1) - 배열 사용

import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int a,b;
        int t = Integer.parseInt(br.readLine());
        
        for (int i=0;i<t;i++) {
        	String string[] = br.readLine().split(" ");
        	a = Integer.parseInt(string[0]);
        	b = Integer.parseInt(string[1]);
        	System.out.println(a+b);
        }  
	}
}

이거 하기 전에 StringBuilder를 사용했는데 계속 오류나서 이 방법으로 했다.

알고보니 StringTokenizer도 필요 없었음... 배열을 사용했다.

사실 이것도 계속 안되서 뭐가 문제지? 에러는 안나는데??? 하며 30분 끙끙대다가 오타 발견했는데 정말 허무했다..

👩🏻‍💻 소스코드3 : BufferedReader사용(2) - StringTokenizer, StringBuilder 사용

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		
        int t = Integer.parseInt(br.readLine());
        
        for (int i=1;i<=t;i++) {
        	StringTokenizer st = new StringTokenizer(br.readLine()); // token for문 돌릴때마다 새로 초기화해줘야됨
        	sb.append((Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()))).append("\n");
        }  
        System.out.println(sb);
	}
}

 

이것도 사실 계속 안됐는데, 생각해보니까 for문이 돌때마다 StringTokenizer가 초기화시켜줘야 하니까.. for문 안에 넣어야 했다. 계속 바깥쪽에 있어서 안됐던 것 ㅠㅠㅠ 2번 방법은 입력할때마다 출력이 바로바로 나오고, 이 방법은 입력이 끝난 후에 출력이 한꺼번에 나온다.

 

 


 

 

10950번: A+B - 3

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

www.acmicpc.net

 

'알고리즘 > 백준' 카테고리의 다른 글

백준 | 2156 - 포도주 시식 (python)  (0) 2021.10.08
백준 | 10610 - 30 (python)  (0) 2021.10.07
백준 | 10250 - ACM호텔 (Java)  (0) 2021.10.07
백준 | 2292 - 벌집 (Java)  (0) 2021.10.07
백준 | 1149 - RGB거리 (python)  (0) 2021.10.07