문제
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개의 최솟값과 최댓값을 공백으로 구분해 출력한다.
나는 이 문제를 세가지 방법으로 풀어보았다.
코드 1 - 기준점 잡고 최대, 최소 비교하기
import java.util.Scanner;
public class bj_10818 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[] arr = new int[num];
for (int i = 0; i < num; i++) {
arr[i] = sc.nextInt();
}
int min = arr[0];
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
if (arr[i] > max) {
max = arr[i];
}
}
System.out.println(min + " " + max);
}
}
◾ min, max을 배열의 첫 번째 값으로 초기화
◾ 반복문을 통해 배열의 요소를 접근하면서 min과 max 값 비교
◾ 배열의 요소가 min 보다 작다면 min 값을 새로 갱신
◾ 배열의 요소가 max 보다 크다면 max 값을 새로 갱신
코드 2 - 정렬 사용 (Arrays.sort())
import java.util.Arrays;
import java.util.Scanner;
public class bj_10818 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = 0;
num = sc.nextInt();
int[] arr = new int[num];
for (int i = 0; i < num; i++) { // [20, 10, 35, 30, 7]
arr[i] = sc.nextInt();
}
Arrays.sort(arr); // 배열 오름차순으로 정렬 [7, 10, 20, 30, 35]
System.out.println(arr[0] + " " + arr[num-1]);
}
}
◾ Arrays.sort() 정렬 메소드를 이용해 오름차순으로 정렬
◾ 첫번째 인덱스와 마지막 인덱스의 요소 출력
코드 3 - Math 라이브러리 사용
import java.util.Scanner;
public class bj_10818 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = 0;
num = sc.nextInt();
int[] arr = new int[num];
for (int i = 0; i < num; i++) { // [20, 10, 35, 30, 7]
arr[i] = sc.nextInt();
}
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for (int i = 0; i < arr.length; i++) {
max = Math.max(max, arr[i]);
min = Math.min(min, arr[i]);
}
System.out.println(min + " " + max);
}
}
◾ Math 라이브러리의 min(), max() 메소드 이용
💡 Math.min() 와 Math.max()
Math.max()
- Math.max(int a, int b)
- Math.max(double a, double b)
- Math.max(float a, float b)
- Math.max(long a, long b)
a와 b 둘 중 큰 값을 리턴하는 메소드
Math.min()
- Math.min(int a, int b)
- Math.min(double a, double b)
- Math.min(float a, float b)
- Math.min(long a, long b)
a와 b 둘 중 작은 값을 리턴하는 메소드