백준 코딩테스트 문제를 풀다 보니 꼭 필요한 부분이 입/출력 관련된 개념이었다!
입출력에는 어떤 종류들이 있을까? 또 어떤 상황에서 사용하면 좋을지 알아보자!
입/ 출력 방식
표준 입력 | 표준 출력 |
Scanner 클래스 활용 - 간단한 입력에 활용 BufferedReader 클래스 활용 - 입력 데이터가 많을 경우 사용 - 내부적으로 buffer를 사용하여 속도가 빠름 - StringTokenizer 와 함께 사용 (공백을 기준으로 입력받을때 사용) |
System.out.println 함수 활용 - 간단한 출력에 활용 StringBuilder 사용 ( + 연산을 사용하지 않아도 됨) BufferedWriter 클래스 활용 - 출력 데이터가 많을 경우 사용 |
입력방법
Scanner
- 공백을 기준으로 호출한 타입에 맞추어 입력
- 별도의 형변환 필요 없음
Scanner sc = new Scanner(System.in);
// 문자열 입력
String str = sc.next();
// 정수형 입력
int v1 = sc.nextInt();
// 실수형 입력
long v2 = sc.nextLong();
// 논리형 입력
boolean v3 = sc.nextBoolean();
BufferedReader
- 줄 단위의 문자열로 입력
- Buffer를 사용하기 때문에 Scanner보다 반복적인 입력에서 성능이 좋음
- 문자열로 입력받기 때문에 복수 데이터 및 형 변화는 직접 수행해야 함
- 예외처리 꼭 해주기!
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count= Integer.parseInt(br.readLine());
for (int i = 0; i < count; i++) {
String[] inputArr = br.readLine().split(" ");
int v1 = Integer.parseInt(inputArr[0]);
int v2 = Integer.parseInt(inputArr[1]);
System.out.println(v1);
System.out.println(v2);
}
br.close();
출력방법
Println()
System.out.print("A");
System.out.print("B");
//AB
BufferedWriter
- 버퍼를 활용한 출력방식으로 출력 속도가 빠름
- close로 꼭 닫아주기!
- 개행은 직접 넣어주기
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("A");
bw.write("\n");
bw.write("B!");
bw.close();
//A
//B
StringBuilder
- 문자열 수정을 위해 사용
- 문자열을 새로 만들지 않기 때문에 속도와 메모리 절약 등 효과
- + 연산자를 사용하지 않아도 됨
StringBuilder sb = new StringBuilder();
sb.append(1);
sb.append(" test");
System.out.println(sb.toString());
// 1test
표준입력방식
단일값 입력
Scanner 사용
// input: 3
Scanner sc = new Scanner(System.in);
int input = sc.nextInt();
단일 라인 복수 입력
Scanner 사용
- 한 줄에 여러 값이 공백(" ") 간격으로 입력
- 한 줄을 읽어온 후 StringTokenizer 클래스 사용해서 개별 입력 분리
// iinput: 3 2
Scanner sc = new Scanner(System.in);
String row = sc.nextLine();
// Scanner 활용
int v1 = sc.nextInt();
int v2 = sc.nextInt();
int v3 = sc.nextInt();
int v4 = sc.nextInt();
int v5 = sc.nextInt();
// StringTokenizer 사용
StringTokenizer tokenizer = new StringTokenizer(reader.readLine(), " ");
while (tokenizer.hasMoreTokens()) {
int count = Integer.parseInt(tokenizer.nextToken());
}
복수 라인 복수 입력
- 여러 줄에 여러 값이 공백(" ") 간격으로 입력
- 대체로 입력 라인의 개수와 개별값의 개수에 대한 힌트가 주어짐
/*
* input:
*
* 5
* 4 0 1 1
* 4 1 3 1
* 4 2 5 1
* 4 3 7 1
*/
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br1.readLine());
int[][] nums = new int[n - 1][4];
for (int i = 0; i < nums.length; i++) {
String[] numArr = br1.readLine().split(" ");
nums[i] = new int[]{
Integer.parseInt(numArr[0]),
Integer.parseInt(numArr[1]),
Integer.parseInt(numArr[2]),
Integer.parseInt(numArr[3])
};
}
br1.close();
'JAVA' 카테고리의 다른 글
[Java] StringBuilder 클래스 (0) | 2024.07.20 |
---|---|
[Java] Math 클래스 (1) | 2024.07.20 |
[Java] 스레드 Thread (0) | 2024.05.04 |
[Java] 스트림 Stream (0) | 2024.05.04 |
[Java] 람다식 Lambda Expression (0) | 2024.05.04 |