1983 조교의 성적 매기기

Sungmin·2023년 11월 1일
0

SWEA 알고리즘

목록 보기
11/26

조교의 성적 매기기 URL

내 풀이

import java.io.*;
import java.util.*;

public class Test {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        String[] grade = {"A+", "A0", "A-", "B+", "B0", "B-", "C+", "C0", "C-", "D0"};

        for (int t = 1; t <= T; t++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken());
            int K = Integer.parseInt(st.nextToken());
            Map<Integer, Integer> map = new HashMap<>();

            for (int i = 1; i <= N; i++) {
                StringTokenizer st2 = new StringTokenizer(br.readLine());
                int a = Integer.parseInt(st2.nextToken());
                int b = Integer.parseInt(st2.nextToken());
                int c = Integer.parseInt(st2.nextToken());

                map.put(i, (a+b+c) / 3);
            }
            
            List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());

            list.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue()));
            System.out.println(list);
            int idx = 0; int cnt = 1;
            int x = N/10; int answer = 0;
            for (Map.Entry<Integer, Integer> entry : list) {
                answer = entry.getKey();
                if (entry.getKey() == K) {
                    System.out.println("#" + t + " " + grade[idx]);
                }
                System.out.println("grade : " + grade[idx]);
                if (cnt == x) {
                    cnt = 1;
                    idx++;
                }
                cnt++;
                
            }
        }
    }
}

문제를 잘 못 이해하여 중간고사, 기말고사, 과제를 동일하게 더하고 평균을 구하는 실수를 하였다. 문제를 더 꼼꼼히 읽어야 될것 같다.


Solution

import java.io.*;
import java.util.*;
 
public class SW1983 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        String[] grade = {"A+", "A0", "A-", "B+", "B0", "B-", "C+", "C0", "C-", "D0"};
 
        for (int t = 1; t <= T; t++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken());
            int K = Integer.parseInt(st.nextToken());
            Double[] score = new Double[N];
            double find_score = 0.0;
 
            for (int i = 0; i < N; i++) {
                StringTokenizer st2 = new StringTokenizer(br.readLine());
                int a = Integer.parseInt(st2.nextToken());
                int b = Integer.parseInt(st2.nextToken());
                int c = Integer.parseInt(st2.nextToken());
 
                score[i] = a*0.35 + b*0.45 + c*0.20;
 
                if (i+1 == K) {
                    find_score = score[i];
                }
            }
             
            Arrays.sort(score, Collections.reverseOrder());
 
            int idx = 0;
            for (int i = 0; i < score.length; i++) {
                if (score[i] == find_score) {
                    idx = i;
                    break;
                }
            }
            idx = idx / (N/10);
            System.out.println("#" + t + " " + grade[idx]);
        }
    }
}

배운점

난 Map함수를 생각해서 풀었다.
그냥 점수를 변수에 저장해 놓고 배열의 돌며 일치하는 경우를 찾는 쉬운 방법이 있다는 것을 알게되었고 너무 복잡하게 접근했다고 느꼈다.

풀이

1. 전체 등급을 배열에 담기
2. 평균을 담을 배열을 생성하고 반복문을 돌며 저장
3. K번째 학생의 점수는 변수에 저장
4. 내림차순 정렬
5. K번째 학생의 점수를 찾아 학점 출력

profile
Let's Coding

0개의 댓글