본문 바로가기
Algorithm(알고리즘)/SWEA(SW Expert Academy)

[SWEA][Java][D2] 1983 - 조교의 성적 매기기 (HashMap)

by Jun_N 2021. 1. 18.

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PwGK6AcIDFAUq

 

SW Expert Academy

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

swexpertacademy.com

 


문제 풀이 (HashMap)

 

나는 이 문제를 HashMap으로 접근하였다. 

 

입력받은 점수를 중간고사, 기말고사, 과제 비율만큼 계산하여 해당 index와 계산된 비율을 hashMap에 저장한다.

 

그리고 HashMap을 Value 순으로 내림차순 정렬한다. (List를 사용한다)

 

그리고 key와 grade값을 저장할 또다른 HashMap을 만들어주고 ratio (N/10) 만큼씩 잘라서 점수를 주면 된다.

 

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        for (int t = 1; t <= T; t++) {
            HashMap<Integer, Double> map = new HashMap<>();
            int N = sc.nextInt();
            int K = sc.nextInt();
            int ratio = N / 10;
            for (int i = 1; i <= N; i++) {
                double a = sc.nextDouble();
                double b = sc.nextDouble();
                double c = sc.nextDouble();
                double score = a * 0.35 + b * 0.45 + c * 0.2;
                map.put(i, score);
            }
            List<Integer> keySetList = new ArrayList<>(map.keySet());
            Collections.sort(keySetList, (o1, o2) -> (map.get(o2).compareTo(map.get(o1))));

            HashMap<Integer, String> gradeMap = new HashMap<>();
            String[] grade = { "A+", "A0", "A-", "B+", "B0", "B-", "C+", "C0", "C-", "D0" };
            int i = 0;
            for (Integer key : keySetList) {
                gradeMap.put(key, grade[i++ / ratio]);
            }
            System.out.println("#" + t + " " + gradeMap.get(K));
        }
    }
}

 


다른 풀이 방법

(1) Array

import java.util.Scanner;
import java.util.Arrays;
import java.util.Collections;
public class Solution {
    public static void main(String args[]) {
        final String grades[] = {"A+","A0","A-","B+","B0","B-","C+","C0","C-","D0"};
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        for(int t=1; t<=T; t++) {
            int n = sc.nextInt();
            int k = sc.nextInt()-1;
            Integer a[] = new Integer[n];
            for(int i=0; i<n; i++) {
                int mid = sc.nextInt(); 
                int fin = sc.nextInt();
                int hom = sc.nextInt();
                a[i] = mid*35 + fin*45 + hom*20;
            }
            int k_score = a[k];
            Arrays.sort(a, Collections.reverseOrder());
            int k_rank = Arrays.asList(a).indexOf(k_score);
            System.out.format("#%d %s\n", t, grades[10*k_rank/n]);
        }
    }
}

이 문제로 배운 점

 

파이썬처럼 dict이 없기 때문에 HashMap을 잘 다루는데 연습이 필요해 보인다.

 

정렬의 경우도 잘 알아두기!