본문 바로가기
Algorithm/Baekjoon

[백준 알고리즘][자바] 10818번 : 최소, 최대

by hyunipad 2021. 1. 19.
반응형

https://www.acmicpc.net/problem/10818

 

10818번: 최소, 최대

첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

www.acmicpc.net

 

문제 해결

 

이번 문제의 카테고리는 배열이었다. N개의 정수 중 최댓값과 최솟값을 출력하는 문제이다.

 

해결 방법

 

첫 번째 시도

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {

		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int count = Integer.parseInt(br.readLine());
		StringTokenizer st;
		int[] num = new int[count];

		st = new StringTokenizer(br.readLine()," ");

		for (int i = 0; i < num.length; i++) {
			int A = Integer.parseInt(st.nextToken());
			num[i] = A;
		}
		
		int max = num[0];
		int min = num[0];
		
		for(int i = 0 ; i < num.length; i++) {
			for(int j = i + 1 ; j < num.length; j++) {
				if(max < Math.max(num[i], num[j])) {
					max = Math.max(num[i], num[j]);					
				}
				
				if(min > Math.min(num[i], num[j])) {
					min = Math.min(num[i], num[j]);					
				}
			}
		}
		
		
		bw.write(min + " " + max);

		br.close();

		bw.flush();
		bw.close();
	}

}

나름 실행 시간 아껴보겠다고 Math클래스를 썼는데 결과는...

두 번째 시도

for문 하나를 줄였다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {

		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int count = Integer.parseInt(br.readLine());
		StringTokenizer st;
		int[] num = new int[count];

		st = new StringTokenizer(br.readLine()," ");

		for (int i = 0; i < num.length; i++) {
			int A = Integer.parseInt(st.nextToken());
			num[i] = A;
		}
		
		int max = num[0];
		int min = num[0];
		
		for(int i = 0 ; i < num.length - 1; i++) {
			if(max < Math.max(num[i], num[i+1])) {
				max = Math.max(num[i], num[i+1]);					
			}			
			if(min > Math.min(num[i], num[i+1])) {
				min = Math.min(num[i], num[i+1]);					
			}
		}
				
		bw.write(min + " " + max);

		br.close();

		bw.flush();
		bw.close();
	}

}

 등수로 50등정도닌깐 나쁘지 않은 거 같습니다.

 

 

 

 

반응형

댓글