본문 바로가기

Coding Test/Problem Number

[Java] 너의 평점은 [25206번]

https://www.acmicpc.net/problem/25206

  • 예제 입력1
ObjectOrientedProgramming1 3.0 A+
IntroductiontoComputerEngineering 3.0 A+
ObjectOrientedProgramming2 3.0 A0
CreativeComputerEngineeringDesign 3.0 A+
AssemblyLanguage 3.0 A+
InternetProgramming 3.0 B0
ApplicationProgramminginJava 3.0 A0
SystemProgramming 3.0 B0
OperatingSystem 3.0 B0
WirelessCommunicationsandNetworking 3.0 C+
LogicCircuits 3.0 B0
DataStructure 4.0 A+
MicroprocessorApplication 3.0 B+
EmbeddedSoftware 3.0 C0
ComputerSecurity 3.0 D+
Database 3.0 C+
Algorithm 3.0 B0
CapstoneDesigninCSE 3.0 B+
CompilerDesign 3.0 D0
ProblemSolving 4.0 P
  • 예제 출력1
3.284483
  • 예제 입력2
BruteForce 3.0 F
Greedy 1.0 F
DivideandConquer 2.0 F
DynamicProgramming 3.0 F
DepthFirstSearch 4.0 F
BreadthFirstSearch 3.0 F
ShortestPath 4.0 F
DisjointSet 2.0 F
MinimumSpanningTree 2.0 F
TopologicalSorting 1.0 F
LeastCommonAncestor 2.0 F
SegmentTree 4.0 F
EulerTourTechnique 3.0 F
StronglyConnectedComponent 2.0 F
BipartiteMatching 2.0 F
MaximumFlowProblem 3.0 F
SuffixArray 1.0 F
HeavyLightDecomposition 4.0 F
CentroidDecomposition 3.0 F
SplayTree 1.0 F
  • 예제 출력2
0.000000

  • 문제 접근
    • 입력 ⇒ 20줄에 걸쳐 과목명 / 학점 / 등급이 주어짐
    • 출력 ⇒ 전공 평점(학점 * 과목평점의 총 합 / 학점의 총합)
  • 문제 해결
    • 과목 평점을 Map으로 선언하여 저장
    • 등급이 P인 경우 계산에서 제외
    • 학점의 총합과 학점 * 과목 평점의 총합을 구해야 함
  • 기존 풀이 [메모리 : 14312 KB / 시간 : 128 ms]
// 과목 평점
static Map<String, Double> subjectScore = Map.of("A+",4.5, "A0", 4.0, "B+", 3.5, "B0", 3.0, "C+", 2.5,
        "C0", 2.0, "D+", 1.5, "D0", 1.0, "F", 0.0);
public static void main(String[] args) throws Exception{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st;
    double totalCredit = 0; // 학점의 총합
    double totalMajorScore = 0; // 전공 평점의 총합

    for(int i = 0; i < 20; i++){
        st = new StringTokenizer(br.readLine());
        st.nextToken(); // 과목명 필요 없음

        // 학점
        double credit = Double.parseDouble(st.nextToken());
        // 등급
        String grade = st.nextToken();

        // 등급이 P면 계산에서 제외
        if(grade.equals("P")) continue;

        totalCredit += credit;
        totalMajorScore += credit * subjectScore.get(grade);
    }

    System.out.println(totalMajorScore / totalCredit);
}

'Coding Test > Problem Number' 카테고리의 다른 글

[Java] 스위치 켜고 끄기 [1244번]  (0) 2024.08.01
[Java] 30 [10610번]  (0) 2024.07.31
[Java] 잃어버린 괄호 [1541번]  (0) 2024.07.31
[Java] 두라무리 휴지 [25178번]  (0) 2024.07.31
[Java] 바이러스 [2606번]  (0) 2024.07.29