![](https://onlinejudgeimages.s3-ap-northeast-1.amazonaws.com/images/boj-og.png)
![](https://blog.kakaocdn.net/dn/brGest/btstSAdyZ3c/BgTZ1umSdNKD0WakmbdNPk/img.png)
이 문제의 주요한 포인트는 A, B, C의 값의 범위이다. int형은 4byte의 크기를 가지며 최대 2^32 만큼의 크기인 –2,147,483,648 ~ 2,147,483,647 사이의 값을 표현할 수 있다.
2^(10 * 10 * 10 * 4 )
1024 * 1024 * 1014 * 4
= 4,294,967,296
// 절반은 음수
따라서 10자리를 넘는 값을 표현할 수 없기 때문에, A, B, C의 합이 10자리를 넘을 수도 있어 Long 으로 값을 처리해주어야 한다.
- 풀이
package level_01.num11382; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); long a = Long.parseLong(st.nextToken()); long b = Long.parseLong(st.nextToken()); long c = Long.parseLong(st.nextToken()); System.out.println(a + b + c); // Scanner sc = new Scanner(System.in); // // long A = sc.nextLong(); // long B = sc.nextLong(); // long C = sc.nextLong(); // // System.out.println(A + B + C); } }
간단하게 Scanner을 사용하는 방법도 있다.
✅ BufferReader VS Scanner
- 입력 버퍼링 (Input Buffering)
입력 버퍼링은 데이터를 미리 읽어와서 메모리에 버퍼로 저장해놓는 것을 말합니다. BufferedReader는 내부적으로 입력 스트림에서 데이터를 먼저 버퍼에 저장한 다음, 프로그램이 필요한 만큼의 데이터를 한 번에 읽어옵니다. 이렇게 하면 작은 데이터 덩어리를 여러 번에 걸쳐 읽어오는 것보다 큰 데이터 덩어리를 한 번에 읽는 것이 효율적입니다. 왜냐하면 파일이나 네트워크에서 데이터를 읽는 작업은 비교적 느리기 때문에, 한 번에 많은 양의 데이터를 읽어오는 것이 I/O 작업의 오버헤드를 줄일 수 있습니다.
- BufferedReader의 작동 방식:
- BufferedReader는 입력 스트림에서 데이터를 버퍼로 읽어옵니다.
- 프로그램이 버퍼로부터 필요한 양의 데이터를 가져옵니다. 이 때, 한 번에 많은 양의 데이터를 가져올 수 있습니다.
- 프로그램은 버퍼에 저장된 데이터를 사용하여 처리합니다.
- 버퍼의 데이터가 소진되면, 다시 스트림에서 데이터를 읽어와 버퍼를 채웁니다.
이런 방식으로, 데이터를 한 번에 읽어와서 처리하므로 여러 번의 I/O 작업을 줄이고, 따라서 프로그램의 실행 속도를 높일 수 있습니다.
- BufferedReader의 작동 방식:
- Scanner의 작동 방식:
Scanner는 기본적으로 입력 스트림에서 데이터를 읽을 때마다 바로바로 I/O 연산을 수행합니다. 이는 작은 단위의 데이터를 읽을 때마다 매번 I/O 작업을 수행하게 됩니다. 예를 들어, 정수를 여러 번 읽을 때마다 매번 I/O 연산이 발생하므로 작은 단위의 데이터를 다뤄야 할 경우에는 불필요한 오버헤드가 발생할 수 있습니다.
Uploaded by N2T