문제
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
출력
첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.
<어려웠던 점>
-첫째 줄 정수의 개수 N이 둘째줄의 N개의 정수로 연결되게 어떻게 구현하지?-최소, 최대 표현을 어떻게 하지? -> 본인은 MIN, MAX 사용하려 했음
사실 시간도 없고, 계속 생각해도 도저히 못 풀것같아서 코드를 완성하지 못했다...주륵
그래서 미완성 코드를 chat gpt의 도움을 받아 완성시켜는 보았다..
<gpt와 나의 합작>
package Bronze;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class b10818_MinMax {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
// 정수들을 저장할 ArrayList 생성
ArrayList<Integer> numbers = new ArrayList<>();
// N개의 정수를 입력받아 ArrayList에 추가
for (int i = 0; i < N; i++) {
int num = sc.nextInt();
numbers.add(num);
}
// Collections 클래스의 max 메서드를 사용하여 최댓값 구하기
int max = Collections.max(numbers);
// Collections 클래스의 min 메서드를 사용하여 최솟값 구하기
int min = Collections.min(numbers);
// 최솟값과 최댓값 출력
System.out.println(min + " " + max);
}
}
- Scanner를 사용하여 정수를 입력받을 수 있도록 설정
- ArrayList인 numbers를 생성하여 입력받은 정수들을 저장
- for 루프를 사용하여 N개의 정수를 입력받고, numbers에 추가
- Collections 클래스의 max 메서드를 사용하여 numbers 리스트에서 최댓값을 구함
- Collections 클래스의 min 메서드를 사용하여 numbers 리스트에서 최솟값을 구함
- 최솟값과 최댓값을 출력
찾아보니 Array.sort()를 이용하여 푸는게 일반적이었다.
<Array.sort()를 이용한 코드>
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = in.nextInt();
}
in.close();
Arrays.sort(arr);
System.out.print(arr[0] + " " + arr[N - 1]);
}
}
첫번째 코드보다 메모리도 커지고 코드길이도 줄어들었다. 하지만 시간은 첫번째 코드에 비해 늘어났다.
처음으로 고전해도 풀리지 않는 문제였어서 속상하긴하지만, 이또한 성장하는 밑거름이 될거라 믿는다!
'백준' 카테고리의 다른 글
[백준 1152번] 단어의 개수 - JAVA[자바] (1) | 2023.06.20 |
---|---|
[백준 2480번] 주사위 세개 - JAVA[자바] (1) | 2023.06.18 |
[백준 14681번] 사분면 고르기 (1) | 2023.06.16 |
[백준 27866번] 문자와 문자열 (1) | 2023.06.10 |
[백준 2884번] 알람 시계 (1) | 2023.06.08 |