문제 

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

+ Recent posts