반응형
문제(출처)
두 정수 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 } }}
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
반응형
'개발(합니다) > 알고리즘&코테' 카테고리의 다른 글
알고리즘 단계별로 풀어보기 : BOJ-11718(그래도 출력하기) (0) | 2018.12.10 |
---|---|
알고리즘 단계별로 풀어보기 : BOJ-10718(we love kriii) (0) | 2018.12.10 |
알고리즘 단계별로 풀어보기 : BOJ-10172(개) (0) | 2018.12.10 |
알고리즘 단계별로 풀어보기 : BOJ-7287(등록) (0) | 2018.12.10 |
알고리즘 단계별로 풀어보기 : BOJ-1001(A-B) (0) | 2018.12.10 |