ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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() 로 입력받았을 때는 시간초과가 났다.. 

     

     

    소스코드

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    import 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;
            }
     
            @Override
            public 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

    댓글

Designed by Tistory.