백준 10818번 자바
https://www.acmicpc.net/problem/10818
알고리즘
정수 N을 받는다. [ 1 ≤ N ≤ 1,000,000 ]
N개의 정수값를 공백으로 구분해서 받는다. [ -1,000,000 ≤ 정수값 ≤ 1,000,000 ]
받은 정수값에서 최소값과 최댓값을 출력한다.
1. 정수 N을 입력받는다.
2. 최댓값 = -1,000,000 , 최소값 = 1,000,000 초기화
3. N번 만큼 입력받는다.
3-1. 최소값보다 작으면 대입
3-2. 최댓값보다 크면 대입
4. 최소값, 최댓값 출력
풀이1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class No_10818 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
int max = -1000000;
int min = 1000000;
int num;
for (int i = 0; i < N; i++) {
num = Integer.parseInt(st.nextToken());
if (max < num)
max = num;
if (min > num)
min = num;
}
sb.append(min).append(" ").append(max);
System.out.println(sb);
}
}
입력은 BufferedReader로 한 줄 입력받고, 공백을 구분으로 나눠야하기 때문에 StringTokenizer를 사용했다.
출력은 StringBuilder에 문자를 이어붙여 출력했다.
입력받는 정수의 범위는 -1,000,000 이상 1,000,000 이하이므로 거기에 맞춰서 최댓값과 최솟값을 설정하였고,
입력받을때마다 최댓값과 최솟값을 비교하였다.
풀이2
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class No_10818 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
sb.append(arr[0]).append(" ").append(arr[N - 1]);
System.out.println(sb);
}
}
입력받는 정수값들을 배열에 넣어서 Arrays.sort로 오름차순 정렬을 통해 출력하였다.
오름차순이므로 arr[0]은 최솟값, arr[N-1]은 최댓값이다.
풀이3
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class No_10818 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
sb.append(Arrays.stream(arr).min().getAsInt()).append(" ").append(Arrays.stream(arr).max().getAsInt());
System.out.println(sb);
}
}
자바8의 스트림(Stream) API를 활용하였다.
Stream에서 제공하는 max()와 min()을 활용하기위해 IntStream으로 변환하여야한다.
그래서 Arrays.stream() 으로 기본 배열을 IntStream으로 변환하여 min()과 max()를 써서 결과를 Optional 객체로 반환하였다. 그 후 getAsInt()를 통해 int 값을 반환받는다. 이 때 반환값이 없는 경우 NoSuchElementException 예외가 발생할 수 있다.
풀이4
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int max = arr[0];
int min = arr[0];
for (int i = 0; i < N; i++) {
if (arr[i] > max) {
max = arr[i];
} else if(arr[i] < min) {
min = arr[i];
}
}
sb.append(min).append(" ").append(max);
System.out.println(sb);
}
}
풀이1 + 풀이2 느낌으로 풀었다.
배열에 값을 넣은 후 풀이 1번처럼 하나씩 꺼내 값을 비교해 넣는 방식이다.
'코딩테스트 > Java - 백준' 카테고리의 다른 글
[백준] 2577번 - Java(자바) (0) | 2022.01.23 |
---|---|
[백준] 2562번 - Java(자바) (0) | 2022.01.18 |
[백준] 1110번 - Java(자바) (0) | 2022.01.11 |
[백준] 10952번 - Java(자바) (0) | 2022.01.09 |
[백준] 2439번 - Java(자바) (0) | 2022.01.04 |