문제 이름 : 최소, 최대
문제
N
개의 정수가 주어진다.
이때, 최소값 과 최대값 을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수의 개수 N
( 1 <= N
<= 1_000_000 ) 이 주어진다.
둘째 줄에는 N
개의 정수를 공백(' '
) 으로 구분해서 주어진다.
모든 정수는 -1_000_000
보다 크거나 같고, 1_000_000
보다 작거나 같은 정수이다.
출력
첫째 줄에 주어진 정수 N
개의 최소값 과 최대값 을 공백으로 구분하여 출력한다.
예제 입력 1
5
20 10 35 30 7
예제 출력 1
7 35
최소값과 최대값을 구하는 방법이 뭘까?
한번 일차원적으로 생각해 보자.
그리고 쪼개서 생각 해 보자.
지속적으로 들어오는 수들의 최소값과 최대값을 구하는 방법이 뭘까?
- 최소값과 최대값을 먼저 설정하고 비교하는 방식
- 첫 번째 값을 최소값과 최대값에 할당하는 방식
1. 최소값과 최대값을 먼저 설정하는 방식
문제에 작성되어 있듯이, 주어지는 변수는 마이너스 백만에서 플러스 백만이다.
그렇다면, 마이너스 백만일, 그리고 플러스 백만일 로 최소값, 최대값을 할당해도 된다.
그것보다 더 편한 방식이 있는데, 초기화되는 변수에 할당될 수 있는 가장 낮은 값 과 가장 높은 값 을 할당하는 방식이 있다.
이는 Integer.MIN_VALUE
, 그리고 Integer.MAX_VALUE
로 불러올 수 있다.
그런데, 최대값에 최대값 을 할당하는 것이 아니라, 최소값 을 할당해야 한다는 것을 꼭 기억하자.
2. 첫 번째 값을 최소값과 최대값으로 사용하기
물론 위의 방식은 무조건 1 개 이상의 요소가 비교 대상으로 들어오기 때문에 편히 사용 가능하다.
그런데, 이런 생각을 해 볼 수 있다.
요소가 전혀 들어오지 않는다면?
즉, 요소가 0개 라면?
그러면 최소값과 최대값이 그대로 Integer.MIN_VALUE
와 Integer.MAX_VALUE
가 된다.
현재 문제는 정수의 개수가 1개 이상으로 들어오기에 그런 일은 없겠지만,
그런 상황에 대비하여 2 개의 답을 작성 해 보자.
Answer1 - 최소값과 최대값 먼저 설정
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int max = Integer.MIN_VALUE; // int 타입의 최대값 +21억쯤
int min = Integer.MAX_VALUE; // int 타입의 최소값 -21억쯤
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++) {
int num = Integer.parseInt(st.nextToken());
min = (min > num) ? num : min;
max = (max < num) ? num : max;
}
System.out.println(min + " " + max);
}
}
Answer2 - 첫 번째 값을 최소값과 최대값으로 사용하기
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int min = Integer.parseInt(st.nextToken());
int max = min;
// 두 번째 요소부터 비교 시작. - 만약 요소가 1개라면 실행되지 않음.
for(int i = 1; i < N; i++) {
int num = Integer.parseInt(st.nextToken());
min = (min > num) ? num : min;
max = (max < num) ? num : max;
}
System.out.println(min + " " + max);
}
}
틀린 것이 있다면 댓글 부탁드립니다!
'백준-단계별로 풀어보기 > 4-1차원 배열' 카테고리의 다른 글
백준 10811 - 바구니 뒤집기 (0) | 2024.09.06 |
---|---|
백준 3052 - 나머지 (0) | 2024.09.05 |
백준 10810 - 공 넣기 (3) | 2024.08.28 |
백준 10807 - 개수 세기 (0) | 2024.08.27 |