문제
https://www.acmicpc.net/problem/10818
10818번: 최소, 최대
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
www.acmicpc.net
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수의 개수 (1 ≤ N ≤ 1,000,000)이 주어진다.
둘째 줄에는 N개의 정수를 공백으로 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
출력
첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.

작성 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class MinMax {
public static void main(String[] args) throws IOException {
// BufferedReader 클래스를 사용하여 입력
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int Min = 1000000;
int Max = -1000000;
StringTokenizer st = new StringTokenizer(br.readLine()); // 공백 단위 데이터 가공
for (int i = 0; i < N; i++) {
int input = Integer.parseInt(st.nextToken()); // 호출
Max = Math.max(Max, input); // 두 인자 값 중 큰 값을 리턴
Min = Math.min(Min, input); // 두 인자 값 중 작은 값을 리턴
}
System.out.print(Min + " " + Max);
}
}
BufferedReader
: Scanner와 유사
Bufferedwriter:
System.out.println();과 유사
- 속도 측면에서 훨씬 빠르기 때문에 많은 양의 데이터를 처리할 때 유리하다.
- 입력된 데이터가 바로 전달되지 않고 버퍼를 거쳐 전달되기 때문에 데이터 처리 효율성이 높다.
- 하지만 BufferedReader은 Enter만 경계로 인식하고 받은 데이터가 String으로 고정되기 때문에 입력받은 데이터 가공이 필요한 경우가 많다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
// BufferedReader 클래스를 사용하여 입력
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine(); //String
int i = Integer.parseInt(br.readLine()); //Int
입력은 readLine(); 메서드를 활용한다.
※ 주의해야할 점
1. readLine()시 리턴 값을 String으로 고정되기 때문에 String이 아닌 다른 타입 입력을 받으려면 형 변환을 꼭 해주어야 한다.
2. 예외처리 필수 - readLine을 할 때마다 try ~ catch문을 활용하여 예외처리를 해주어도 되지만 대게 throw IOException을 통하여 작업한다.
import java.io.IOException;
public static void main(String[] args) throws IOException {
}
Read한 데이터는 Line 단위로만 나누어지기 때문에 공백 단위로 데이터를 가공하려면 따로 작업을 해주어야 한다.
방법1. StringTokenizer에 nextToken() 함수를 쓰면 readLine()을 통해 입력 받은 값을 공백 단위로 구분하여 순서대로 호출할 수 있다.
방법2. String.split() 함수를 활용하여 배열에 공백 단위로 끊어서 데이터를 넣고 사용하는 방식이다.
StringTokenizer st = new StringTokenizer(s); //StringTokenizer인자값에 입력 문자열 넣음
int a = Integer.parseInt(st.nextToken()); //첫번째 호출
int b = Integer.parseInt(st.nextToken()); //두번째 호출
String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음
배열 1Page 노트 정리

'코딩테스트' 카테고리의 다른 글
| 미완/백준 24174 힙 정렬 (0) | 2023.03.21 |
|---|---|
| 미완/백준 1158 요세푸스 순열 (0) | 2023.03.21 |
| 백준 26008 해시 해킹 (0) | 2023.03.20 |
| 미완/(Queue)백준 1021 회전하는 큐 (0) | 2023.03.17 |
| (Stack)백준 25556 포스택 (0) | 2023.03.15 |