728x90
https://www.acmicpc.net/problem/10818
요즘 알고리즘을 자바 문법도 다시 복습할 겸 단계별로 풀어보고 있다. 오늘은 배열!
정말 간단한 문제지만 어떤 방법으로 풀어야 더 효율적인지 알고 싶어서 다양한 방법으로 풀어보고 있다 ㅎㅎ
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 |