문제
https://www.acmicpc.net/problem/10818
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
첫 번째 풀이
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int[] numbers = new int[n];
int biggest = 0;
int smallest = 0;
StringBuffer sb = new StringBuffer();
StringTokenizer st = new StringTokenizer(br.readLine()," ");
for(int i = 0 ; i < n ; i ++) {
numbers[i] = Integer.parseInt(st.nextToken());
};
smallest = numbers[0];
biggest = numbers[0];
for(int i = 0 ; i < n ; i ++) {
if( smallest > numbers[i] ) {
smallest = numbers[i];
}
else if( biggest < numbers[i] ) {
biggest = numbers[i];
}
};
sb.append(String.valueOf(smallest)).append(" ").append(String.valueOf(biggest));
bw.write(String.valueOf(sb));
bw.close();
br.close();
}
}
두 번째 풀이 : 뭔가 복잡한 것 같아서 chat gpt에 코드 개선 요청해 봄
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int smallest = Integer.MAX_VALUE;
int biggest = Integer.MIN_VALUE;
for (int i = 0; i < n; i++) {
int num = Integer.parseInt(st.nextToken());
if (num < smallest) {
smallest = num;
}
if (num > biggest) {
biggest = num;
}
}
StringBuilder sb = new StringBuilder();
sb.append(smallest).append(" ").append(biggest);
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
개선 사항 :
1. StringBuilder 사용 최적화 : StringBuilder에 직접 정수 값을 추가하여 성능을 높임
2. Integer.MAX_VALUE 및 Integer.MIN_VALUE 사용 : smallest와 biggest를 초기화할 때 Integer.MAX_VALUE와 Integer.MIN_VALUE를 사용하여 모든 가능한 값과 비교할 수 있음
3. 불필요한 변환 제거 : String.valueOf()를 제거하고 직접 StringBulder에 정수를 추가
세 번째 풀이
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int[] numbers = new int[n];
int biggest = 0;
int smallest = 0;
StringBuffer sb = new StringBuffer();
StringTokenizer st = new StringTokenizer(br.readLine()," ");
for(int i = 0 ; i < n ; i ++) {
numbers[i] = Integer.parseInt(st.nextToken());
};
smallest = numbers[0];
biggest = numbers[0];
for(int i = 0 ; i < n ; i ++) {
if( smallest > numbers[i] ) {
smallest = numbers[i];
}
else if( biggest < numbers[i] ) {
biggest = numbers[i];
}
};
sb.append(smallest).append(" ").append(biggest);
bw.write(String.valueOf(sb));
bw.close();
br.close();
}
}
개선해도 시간이 드라마틱하게 줄어드는 것 같지 않아
다시 이전코드에서 불필요한 변환만 제거 해 보았음
네 번째 풀이 : Arrays.sort()를 사용하여 배열 정렬하기
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int[] numbers = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < n; i++) {
numbers[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(numbers);
StringBuilder sb = new StringBuilder();
sb.append(numbers[0]).append(" ").append(numbers[n-1]);
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
시간이 아주 많이..... 늘었다 ...
'개인공부 > 백준코딩연습' 카테고리의 다른 글
[1차원 배열] - 공 넣기 (0) | 2024.08.16 |
---|---|
[1차원 배열] - 최댓값 (0) | 2024.08.12 |
[1차원 배열] - X보다 작은 수 (0) | 2024.08.12 |
[1차원 배열] - 개수 세기 (0) | 2024.08.12 |
[반복문] - A+B - 4 (1) | 2024.08.12 |