백준 알고리즘 | 10950번 - A+B - 3

유하연·2021년 6월 18일

BOJ

목록 보기
2/9

백준 알고리즘 10950번: A+B - 3 JAVA


문제 주소: https://www.acmicpc.net/problem/10950

​

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

​

처음 자바 시작할 때, 입력받는건 무조건 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번 방법은 입력할때마다 출력이 바로바로 나오고, 이 방법은 입력이 끝난 후에 출력이 한꺼번에 나온다.

​

profile
https://yuhalog.tistory.com/

0개의 댓글