728x90
반응형
<문제 링크>
https://www.acmicpc.net/problem/2822
<풀이>
2차원 배열을 사용했기 때문에 Arrays.sort()에서 두번째 매개변수에 조건식을 써줘야 한다.
이를 통해서 다차원 배열도 원하는 조건으로 정렬이 가능하다.
다차원 배열을 테이블로 만들자면 다음과 같다
0 | 1 | |
0 | 점수1 | 1 |
1 | 점수2 | 2 |
2 | 점수3 | 3 |
행이 1차원 배열이고 열이 2차원 배열을 뜻한다.
위 배열을 정렬하기 위해서는 [i][0]번째 값들을 비교해야 한다.
그래서 (int[] a, int[] b)로 0번째와 1번째 인덱스 정보를 가져오고
[0][0]과 [1][0]을 비교해 내림차순으로 만들어야한다.
두번째 함수 return 값에 따라 정렬 기준이 바뀌는데 정리하면 다음과 같다.
음수 | 오름차순 |
0 | 변화X |
양수 | 내림차순 |
그래서 뒤에 있는 b가 크다면 앞으로 와야 하기 때문에 return b[0] - a[0]을 통해 양수를 return 시
b가 앞으로 오고 아니면 뒤로 가게 정렬해줬다.
그다음 상위 5개 문제 번호를 result에 저장하고 sum을 구한 다음,
result를 정렬하고 sum과 함께 출력한다.
<코드>
arr: 점수 저장 배열 { 0: 점수, 1: 문제 번호 }
result: 상위 5개 문제 번호 저장
sum: 상위 5개 문제에 대한 총점
import java.util.Arrays;
import java.util.Scanner;
public class B2822 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] arr = new int [8][2]; // 입력 저장
int[] result = new int [5]; // 상위 5개 문제 저장
int sum = 0;
for(int i = 0; i < 8; i++){
arr[i][0] = sc.nextInt();
arr[i][1] = i + 1;
}
// 점수를 기준으로 저장
Arrays.sort(arr, (int[] a, int[] b) -> {
return b[0] - a[0];
});
// 상위 5개의 합과 문제 저장
for(int i = 0; i < 5; i++){
sum += arr[i][0];
result[i] = arr[i][1];
}
Arrays.sort(result);
// 출력
System.out.println(sum);
for(int i = 0; i < 5; i++){
System.out.print(result[i] + " ");
}
sc.close();
}
}
728x90
반응형
'~2023' 카테고리의 다른 글
[JAVA] 백준 17478번 문제, 재귀함수가 뭔가요? (0) | 2021.07.04 |
---|---|
[JAVA/PYTHON] 백준 1158번 문제, 요세푸스 문제 (0) | 2021.06.26 |
[JAVA/PYTHON3] 백준 7568번 문제 - 덩치 비교하기 (0) | 2021.06.25 |
[MySQL] MySQL 8.0에서 스키마, 테이블 구조 보기 (0) | 2021.06.22 |
[Ubuntu] Ubuntu 20.04 Anaconda3 install / 아나콘다 설치 (0) | 2021.06.21 |