Algorithms 🚀/Baekjoon

[백준/10818번] 최소, 최대

728x90

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

 

10818번: 최소, 최대

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

www.acmicpc.net

요즘 알고리즘을 자바 문법도 다시 복습할 겸 단계별로 풀어보고 있다. 오늘은 배열!

 

정말 간단한 문제지만 어떤 방법으로 풀어야 더 효율적인지 알고 싶어서 다양한 방법으로 풀어보고 있다 ㅎㅎ

 

1. Scanner + for 

2. BufferedReader + StringTokenizer

이렇게 2가지 방법으로 풀어봤고 코드는 아래와 같습니다.

 

코드 1. Scanner + for

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();		
		int[] arr = new int[n];
		
		for(int i=0; i<n; i++) {
			arr[i] = sc.nextInt();
		}
		
		int min = arr[0];
		int max = arr[0];
		
		for(int i=1; i<arr.length; i++) {
			if(arr[i] < min) min = arr[i];
			if(arr[i] > max) max = arr[i];
		}
		
		System.out.printf("%d %d", min, max);
	}
}

가장 기초적이고 단순한 for문을 이용해서 최대, 최솟값을 구하는 방법이다.


코드 2. BufferedReader + StringTokenizer

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) {
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			
			int n = Integer.parseInt(br.readLine());
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			
			int index = 0;
			int[] arr = new int[n];
			
			while(st.hasMoreTokens()) {
				arr[index] = Integer.parseInt(st.nextToken());
				index++;
			}
			
			Arrays.sort(arr);
			System.out.print(arr[0] + " " + arr[n-1]);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

위의 방법은 코드는 좀 더 길지만 Scanner를 이용한 방식보다 더 효율적인 코드이다. 

BufferedReader는 버퍼 단위로 코드를 읽어오기 때문이다 (이건 나중에 포스팅으로 다시 자세하게 정리할 예정)

 

위의 표를보면 BufferedReader를 사용한 코드가 훨씬 더 메모리를 적게 사용하는 것을 알 수 있다.

 

요즘에는 알고리즘을 푸는 것에 의미를 두는 것보다 어떻게 해야 더 효율적으로 풀 수 있는지에 대해 생각하면서 풀고 있다.

여러 가지 방법으로 풀면서 헷갈리고 어려운 문법들을 복습할 수 있어서 좋은 것 같다.ㅎㅎ

728x90

'Algorithms 🚀 > Baekjoon' 카테고리의 다른 글

[백준/8958번] OX퀴즈  (0) 2021.02.16
[백준/3052번] 나머지  (0) 2021.02.02
[백준/1546번] 평균  (0) 2021.02.02
[백준/2577번] 숫자의 개수  (0) 2021.02.01
[백준/1541번] 잃어버린 괄호 [Java]  (0) 2021.01.21