백준 25206 - 너의 평점은

1 minute read

Published:

링크

개요

문제에서 요구하는 것

  • 전공 평점 계산후 출력해줘

난이도

solve.ac 난이도 : 실버5
개인 난이도 : 1/5

문제에서 어려움

  1. A+, B같은 과목 평점을 어떻게 double형 점수로 나타낼 것인가

    String 타입으로 평점을 받아 dvTotal이라는 정적 메소드를 사용해서 double타임으로 바꾸어 주었다.

    ’+’부분과 ‘영어’부분을 구분, Stirng의 charAt함수를 이용해서 두부분의 점수합을 반환.

  2. 사실상 없는 과목인 P를 어떻게 제외 시킬 것인가

    0점 처리후 나누는 값에 P의 학점 만큼을 빼줘야한다.
    학점은 계속 입력으로 들어와서 기억하고 마지막에 나눌 값에서 P의 학점만 빼주기 곤란하니
    매 과목 입력마다 학점이 P인경우에만 학점의 합에 넣지 않기로 구현함.

코드

import java.util.*;
public class Main{

    public static double gToN(String grade){
        double output = 0;
        switch(grade.charAt(0)){
            case 'P':
            case 'F':
            return output;

            case 'A':
            output+= 4.0;
            break;
            case 'B':
            output+= 3.0;
            break;
            case 'C':
            output+= 2.0;
            break;
            case 'D':
            output+= 1.0;
            break;
        }
        if(grade.charAt(1)== '+')
        output+= 0.5;

        return output;
    }

    public static void main(String args[]){
        Scanner scan = new Scanner(System.in);
        double total= 0;
        double dvTotal = 0;

        for(int i = 0; i<20; i++){
            scan.next();
            double a = scan.nextDouble();
            String s = scan.next();
            double b = gToN(s);
            total += a*b;
            if(s.charAt(0)!= 'P')
            dvTotal += a;
        }
        

        System.out.print(total/dvTotal);

    }
}

다른사람 코드와 비교

  1. 과목 평점을 위한 부분.

    참고 : soismonvert
    기존에도 스위치문을 이용해서 평점 변환을 구현 것이 if문보다는 낫지만 눈에 잘 안들어오고 쓸데없이 길어서 신경 쓰이기도 했다. (메인 메소드와 분리한것도 그 때문.)

해당 부분
```java String gradeList[] = {“A+”, “A0”, “B+”, “B0”, “C+”, “C0”, “D+”, “D0”, “F”, “P”}; double gradeScore[] = {4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0.0, 0.0};

    for (int j = 0; j < 10; j++) {
            if (grade.equals(gradeList[j])) {
                totalSum += score * gradeScore[j];
                if (j != 9) {
                    scoreSum += score;
                }
            }
        }
    }

2차원 배열에서의 dx, dy테크닉과 유사하다. 
만약 받은 학점이 gradeList의 인덱스의 값과 같다면 gradeScore의 같은 인덱스로 변환시킨다.  

```java
public static double gToN(String grade){
        String[] gradeCh = {"A+","A0","B+","B0","C+","C0","D+","D0","F","P"};
        double[] gradeDo = {4.5,4.0,3.5,3.0,2.5,2.0,1.5,1.0,0,0};
        double output = 0;
        
        for(int i = 0; i<gradeCh.length; i++){
            if(grade.equals(gradeCh[i]))
            output = gradeDo[i];
        }

        return output;
    }

기존에 쓸데없이 길쭉했던 gToN 메소드가 혁신적으로 짧아졌다.

대부분의 풀이들이 switch문을 사용하고 소수가 if문과 1차원 배열 테크닉을 사용했다.