-
[SWEA] 시험Algorithm/SWEA 2020. 4. 5. 17:17
[8888] 시험
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW45RuSae2gDFAQ7
- 시험에 참가하는 N명의 참가자에게 1부터 N까지의 번호가 붙어 있고,
- 그들은 T개의 문제를 통해서 경쟁한다.
- 각 문제는 해당 문제를 풀지 못한 참가자의 수를 점수로 가지며, 때문에 대회가 끝나고 나서야 점수가 결정된다.
- 참가자는 자신이 푼 문제들이 배정된 점수들의 합을 자신의 점수로 가진다.
- 참가자의 등수는 (자신보다 많은 점수를 획득한 참가자의 수) + (자신과 같은 점수를 획득하였지만 더 많은 문제를 푼 참가자의 수) + (자신과 같은 점수 && 같은 수의 푼 문제 && 번호가 저 작은 참가자의 수) + 1로 결정된다.
- 대회의 채점 결과가 주어졌을 때, 지학이의 점수와 등수를 계산해라.
Solution
- Participant 클래스에서 점수 > 푼 문제 수 > 번호 순서로 정렬하는 compareTo() 메서드를 구현한 풀이 방법
- nextInt() 로 입력받았을 때는 시간초과가 났다..
소스코드
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer;public class Solution {static int T, n, t, p, ansScore, ansRanking;static int[][] scores;static int[] grades;static Participant[] participants;static StringTokenizer st;static class Participant implements Comparable<Participant> {private int num;private int solve;private int score;private int ranking;public Participant(int num, int solve) {this.num = num;this.solve = solve;}@Overridepublic int compareTo(Participant o) {return (this.score < o.score) ? 1: (this.score == o.score)? (this.solve < o.solve) ? 1 : (this.solve == o.solve) ? this.num > o.num ? 1 : -1 : -1: -1;}}public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));int T = stoi(br.readLine());for (int tc = 1; tc <= T; tc++) {st = new StringTokenizer(br.readLine());n = stoi(st.nextToken());t = stoi(st.nextToken());p = stoi(st.nextToken());init();for (int i = 1; i <= n; i++) {st = new StringTokenizer(br.readLine());int count = 0;for (int j = 1; j <= t; j++) {scores[i][j] = stoi(st.nextToken());if (scores[i][j] == 1) {count++;} else {grades[j]++;}}participants[i] = new Participant(i, count);}grading();Arrays.sort(participants, 1, participants.length);for (int i = 1; i < participants.length; i++) {participants[i].ranking = i;}for (int i = 1; i < participants.length; i++) {if (participants[i].num == p) {ansScore = participants[i].score;ansRanking = participants[i].ranking;}}System.out.println("#" + tc + " " + ansScore + " " + ansRanking);}}static void grading() {for (int i = 1; i <= n; i++) {int score = 0;for (int j = 1; j <= t; j++) {if (scores[i][j] == 1) {participants[i].score += grades[j];}}}}static void init() {scores = new int[n + 1][t + 1];grades = new int[t + 1];participants = new Participant[n + 1];}static int stoi(String s) {return Integer.parseInt(s);}}cs 'Algorithm > SWEA' 카테고리의 다른 글
[SWEA] S/W 문제해결 기본 (2) - Ladder 1 (0) 2020.04.16 [SWEA] 초콜릿과 건포도 (0) 2020.04.15 [SWEA] 진용이네 주차타워 (0) 2020.04.05 [SWEA] 탈주범 검거 (0) 2020.03.03 [SWEA] 특이한 자석 (0) 2020.02.21