카테고리 없음

[SWEA] 1983번 : 조교의 성적 매기기

코딍코딍 2023. 10. 23. 17:19

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5PwGK6AcIDFAUq&categoryId=AV5PwGK6AcIDFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=JAVA&select-1=2&pageSize=10&pageIndex=1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

 


소스코드

import java.io.*;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

class Solution {
    static class Node {
        int num;
        double score;

        public Node(int num, double score) {
            this.num = num;
            this.score = score;
        }
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();
        int t = Integer.parseInt(br.readLine());
        String grade[] = {"A+", "A0", "A-", "B+", "B0", "B-", "C+", "C0", "C-", "D0"};

        for (int i = 0; i < t; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            int n = Integer.parseInt(st.nextToken());
            int k = Integer.parseInt(st.nextToken());

            Node arr[] = new Node[n];
            for (int j = 0; j < n; j++) {
                st = new StringTokenizer(br.readLine());
                // 35% 45% 20%
                double score = 0;
                score += Integer.parseInt(st.nextToken()) * (0.35);
                score += Integer.parseInt(st.nextToken()) * (0.45);
                score += Integer.parseInt(st.nextToken()) * (0.2);

                arr[j] = new Node(j + 1, score);
            }

            // 점수 기준 내림차순 정렬
            Arrays.sort(arr, new Comparator<Node>() {
                @Override
                public int compare(Node o1, Node o2) {
                    return Double.compare(o2.score, o1.score);
                }
            });

            String result = "";
            for (int j = 0; j < n; j++) {
                // k번째 학생
                if(arr[j].num == k) {
                    result = grade[j / (n / 10)];
                    break;
                }
            }

            sb.append("#" + (i + 1) + " " + result + "\n");
        }

        System.out.println(sb);
    }
}

 

해결 방법

  1. 학생 번호와 점수를 가지는 Node 클래스 생성
  2. 입력값 Node 배열에 저장한 뒤 점수 기준 내림차순 정렬
  3. K번째 학생을 찾아 학점 매기기