🌞Algorithm/🔥Baekjoon

[Baekjoon] 15702_중간고사 채점

뿌야._. 2024. 6. 10. 14:48

Silver V

문제(출처: https://www.acmicpc.net/problem/15702)

< 중간고사 채점 >

 

문제 풀이 

 

각 응지사별로 문제의 채점 결과를 구한 후 ArrayList에 [수험 번호, 점수] 배열 형태로 저장한다. ArrayList를 점수별 내림차순, 점수가 같다면 수험 번호 오름차순으로 정렬한다.

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.StringTokenizer;

public class _15702_ { // 중간고사 채점

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st = new StringTokenizer(bf.readLine());

		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());

		st = new StringTokenizer(bf.readLine());
		int arr[] = new int[n];
		for (int i = 0; i < n; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}

		ArrayList<int[]> list = new ArrayList<>();
		for (int i = 0; i < m; i++) {
			st = new StringTokenizer(bf.readLine());
			int num = Integer.parseInt(st.nextToken());

			int score = 0;
			for (int j = 0; j < n; j++) {
				char x = st.nextToken().charAt(0);

				if (x == 'O') {
					score += arr[j];
				}
			}
			list.add(new int[] { num, score });
		}

		Collections.sort(list, new Comparator<int[]>() {

			@Override
			public int compare(int[] o1, int[] o2) {
				if (o1[1] == o2[1])
					return o1[0] - o2[0];
				return o2[1] - o1[1];
			}
		});
		System.out.println(list.get(0)[0] + " " + list.get(0)[1]);
	}
}
변수)
n, m : 문제의 개수, 응시자 수
arr : 문제의 배점
list : [수험 번호, 점수]
num : 수험 번호
score : 점수
x : 채점 결과

 

문제의 개수와 응시자 수를 입력받는다. 문제 수만큼 문제 배점을 입력받아 arr 배열에 저장한다. 응시자 수만큼 수험 번호와 채점 결과를 입력받는다. 채점 결과를 입력받으면서 해당 문제를 맞혔다면 점수에 배점을 더한다. 수험 번호와 최종 점수를 ArrayList에 배열 형태로 저장한다.

 

ArrayList를 최종 점수 기준으로 내림차순, 최종 점수가 같다면 수험 번호 기준으로 오름차순으로 정렬한다. ArrayList의 0번째 값을 출력한다.



 

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글

[Baekjoon] 23246_Sport Climbing Combined  (0) 2024.06.12
[Baekjoon] 25325_학생 인기도 측정  (0) 2024.06.11
[Baekjoon] 11971_속도 위반  (0) 2024.06.07
[Baekjoon] 1384_메시지  (0) 2024.06.06
[Baekjoon] 11008_복붙의 달인  (0) 2024.06.05