본문 바로가기

개발(합니다)/알고리즘&코테

알고리즘 단계별로 풀어보기 : BOJ-1000(A+B)

반응형

문제(출처)

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


입력

첫째 줄에 A와 B가 주어진다.(0 < A, B<10)


출력

첫째 줄에 A+B를 출력한다.


예제 입력

1 2


예제 출력

3



풀이 예시

import java.util.*;
public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int a, b;
        a = sc.nextInt();
        b = sc.nextInt();
        System.out.println(a + b);
    }
}

내 풀이

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

class Main{
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num1 = br.read() -48;
br.read();
int num2 = br.read() -48;
System.out.println(num1+num2);
} catch (Exception e) {
//TODO: handle exception
}
}
}


내 풀이 해석

Scanner보다는 BufferedReader가 성능이 더 좋습니다. 참고
Scanner는 space와 enter를 구분하고 사용도 편리하지만 겹겹이 처리 하는 과정이 많아 속도면에서 느립니다.
참고 표에서 보이듯이 c/c++의 getchar(*) 한글자씩 읽어오는게 가장 빠릅니다.
그래서 Scanner는 지양하고 BufferedReader를 지향하고 있습니다.

아쉬운 점

br.read()를 하면 한 글자씩 읽어옵니다. 
입력 시 공백 부분도 읽어오기 때문에 3개의 br.read()가 필요하고 1개의 데이터는 유실 됩니다.

학습/검색

1. StringTokenizer를 이용하면 입력 값을 공백 단위로 구분하여 받을 수 있습니다.
ex)
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());

int num1 = Integer.parseInt(st.nextToken());
int num2 = Integer.parseInt(st.nextToken());


2. String의 split(" ")로 배열로 받아 처리합니다.

ex)

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");


3. System.out.println() 대신에 BufferedWriter를 사용하면 처리 속도면에서 나아집니다.

int는 출력이 안되어서 String으로 변환하여 출력했습니다.

ex)

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(String.valueOf(123+456));
bw.flush(); // 데이터를 출력한다.
bw.close(); // 쓰기 스트림을 닫는다.


기타 참고

1. 입력 클래스 : Scanner, BufferedReader, BuffredInputStream
2. 파일 입출력 : BufferedReader br = new BufferedReader(new FileReader("파일 확장자));
3. 출력 클래스 : System.out.pinrt, BuffredWriter, BuffredOutputSteam


반응형