https://www.acmicpc.net/problem/10818
풀이
1. 반복문을 이용하는 방법
=> 입력받은 값들에 대해 배열을 생성하고 배열의 0번째 원소부터 마지막 원소까지 반복문을 돌며 두 값을 비교한 후 더 크거나 작은 값을 max/min 값으로 저장하여 출력한다
2. Collections(java.util.Collections) 클래스를 이용하는 방법
=> Collections.max() 메소드 사용시 리스트의 최댓값을 반환해준다. 반복문을 이용하는 것 보다 효율적으로 보일수 있지만 실제로는 배열 사용시 배열이 리스트로 변환되어야 하는 점에서 원소가 많은 경우 비효율적일 수 있다고 한다
3. Java8의 stream을 이용하는 방법
=> stream api 사용시 배열, 리스트 모두 사용가능하다는 장점이 있다. max() 사용시 Optional 타입으로 반환되므로 추가로 orElse() 를 사용하면 int 타입으로 값을 받을 수 있다
4. 실제 코딩 테스트시에 메모리나 실행 시간에 제한이 있는 경우에는 단순 반복문 형태가 가장 적합하다(그렇다고 이중 삼중 반복을 하자는 것은 아니고..)
소스코드
더보기
// 1. 반복문을 이용하는 방법
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int[] arr = new int[a];
for(int i=0; i<a; i++)
arr[i] = sc.nextInt();
int max = arr[0];
int min = arr[0];
for(int i=0; i<a; i++) {
if(max < arr[i])
max = arr[i];
if(min > arr[i])
min = arr[i];
}
System.out.println(min + " " + max);
}
}
// 2. Collections 클래스를 이용하는 방법
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
List<Integer> arr = new ArrayList<Integer>();
for(int i=0; i<a; i++)
arr.add(sc.nextInt());
int max = arr.isEmpty() ? -1 : Collections.max(arr);
int min = arr.isEmpty() ? -1 : Collections.min(arr);
System.out.println(min + " " + max);
}
}
반응형