문제 내용은 입력으로 각 반의 점수를 받은 뒤 내림차순을 한 뒤, 양식에 맞춰서 최대값, 최소값, 가장 차이가 큰 값을 출력해줘야 하는데, 가장 차이가 큰 값은 내림차순으로 정렬한 뒤 인접한 값과 비교하면서 가장 차이가 큰 값을 반환해줘야 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
for (int i = 0; i < count; i++) {
Integer[] arr = Arrays.stream(br.readLine().split(" ")).map(Integer::parseInt)
.toArray(Integer[]::new);
Integer[] copyedArr = Arrays.copyOfRange(arr, 1, arr.length);
Arrays.sort(copyedArr, Collections.reverseOrder());
int max = copyedArr[0];
int min = copyedArr[copyedArr.length - 1];
int gap = 0;
for (int j = 0; j < copyedArr.length - 1; j++) {
int calc = copyedArr[j] - copyedArr[j + 1];
if (calc > gap) {
gap = calc;
}
}
System.out.println("Class " + (i + 1));
System.out.println("Max " + max + ", Min " + min + ", Largest gap " + gap);
}
}
}
문제를 풀어보자면 먼저 입력받은 횟수만큼 for 문을 돌리고, 이후 들어오는 값을 맨 처음 값은 배열 길이이니 copyOfRange로 제외해주고, 나머지 배열을 내림차순 정렬해주고 이후 정렬한 배열의 처음 값과 끝 값이 각각 최대 최소값이므로 따로 계산해줄 필요는 없고
이후에는 배열 길이만큼 for 문을 돌려주면서, 현재 수와 다음 수를 비교하면서 최대 점수 차이를 찾아준 뒤양식에 맞춰서 최대값, 최소값, 최대 차이값을 반환해주면 끝이다
Leave a Reply