본문 바로가기

~2023

[JAVA] 백준 2822번 문제, 점수 계산

728x90
반응형

<문제 링크>

 

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

 

2822번: 점수 계산

8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문

www.acmicpc.net

 


<풀이>

 

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
반응형