1. 문제 번호 10869번
2. 문제 풀이
-> 분모의 입력값이 0 일 경우 에러가 발생하니 사용자 에러로 재입력을 받게 처리(if문을 사용,while문 사용X)
2.1 new BufferedReader(new InputStreamReader(System.in)); 실행원리 + 메모리구조
2.2 System.in
2.3
3. 소스 인증
import java.util.*;
import java.lang.*;
import java.io.*;
// The main method must be in a class named "Main".
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
getInput(br);
}
public static void getInput(BufferedReader br) throws IOException {
StringTokenizer st;
int A,B;
st = new StringTokenizer(br.readLine());
A = Integer.parseInt(st.nextToken());
B = Integer.parseInt(st.nextToken());
if ( B > 0 ) {
System.out.println(A+B);
System.out.println(A-B);
System.out.println(A*B);
System.out.println(A/B);
System.out.println(A%B);
} else {
getInput(br);
}
}
}
4. 추가 개념
br.readLine()에 굉장히 많은 개념이 숨어있다.
new BufferedReader(new InputStreamReader(System.in));
메모리 구조
System.in은 바이트 입력 스트림(Byte단위의 스트림(연속적))
->
InputStreamReader 문자 입력 스트림
->
BufferedReader 텍스트 입력 스트림 Read
변수는 Stack에 생성, 객체 Heap영역에 생성
다음과 같은 순서로 객체가 생성됩니다:
1. InputStreamReader 객체가 생성되고, 힙 영역에 저장됩니다.
2. InputStreamReader 객체를 매개변수로 받아 BufferedReader 객체가 생성되고, 이 또한 힙 영역에 저장됩니다.
3. BufferedReader 객체에 대한 참조가 변수 br에 저장됩니다.
따라서 힙 영역에는 InputStreamReader 객체와 BufferedReader 객체가 동시에 존재하며, 서로 다른 메모리 주소에 저장됩니다.
System.in
System.in은 System 클래스의 정적 변수이다.
new InputStreamReader(System.in) 부분은 System.in을 사용하여 입력 스트림을 생성하고, 이를 InputStreamReader로 감싸는 것입니다.
InputStreamReader는 바이트 입력 스트림에서 문자 입력 스트림을 생성하는 역할을 합니다.
BufferedReader는 텍스트 입력 스트림을 읽어오는 역할을 담당하는 클래스입니다.
BufferedReader는 문자 입력 스트림에 대한 버퍼링된 입력을 제공하여 효율적인 입출력을 가능하게 합니다.
'알고리즘(BOJ) 문제풀이' 카테고리의 다른 글
[BOJ/백준] 입출력과 사칙연산_10926번 (0) | 2024.05.02 |
---|---|
[BOJ/백준] 입출력과 사칙연산_18108번 (0) | 2024.05.02 |
[BOJ/백준] 입출력과 사칙연산_1008번 (0) | 2024.05.02 |
[BOJ/백준] 입출력과 사칙연산_10998번 (0) | 2024.05.01 |
[BOJ/백준] 입출력과 사칙연산_1001번 (0) | 2024.05.01 |