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

유하연·2021년 6월 18일
0

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개의 댓글

관련 채용 정보