[Java] 너의 학점은

정석·2024년 2월 10일

알고리즘 학습

목록 보기
10/67
post-thumbnail

ℹ️ 문제

한 학생의 '수업이름 학점 성적' 에 대한 값을 20개 받으면 평균 학점을 구하는 프로그램이다.

평균 학점은 '총 성적 / 총 학점' 이므로 이를 활용해 문제를 풀었다.

  • 학점이 'P' 인 경우는 성적에 제외해야 된다.
  • 학생의 성적을 String 으로 받지만 이를 해당하는 성적으로 변환시켜 계산해야 한다.

첫 번째 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main2 {
    public static void main(String[] args) throws IOException {
        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
        double numXsung = 0;
        double sumNum = 0;

        for (int i = 0; i < 20; i++) {
            StringTokenizer st = new StringTokenizer(input.readLine());

            String name = st.nextToken(); // 과목명
            double num = Double.parseDouble(st.nextToken()); // 학점
            String sung = st.nextToken(); // 성적
            double score = 0;

            if (!(sung.equals("P"))) {
                switch (sung) {
                    case "A+":
                        score = 4.5;
                        break;
                    case "A0":
                        score = 4.0;
                        break;
                    case "B+":
                        score = 3.5;
                        break;
                    case "B0":
                        score = 3.0;
                        break;
                    case "C+":
                        score = 2.5;
                        break;
                    case "C0":
                        score = 2.0;
                        break;
                    case "D+":
                        score = 1.5;
                        break;
                    case "D0":
                        score = 1.0;
                        break;
                    case "F":
                        score = 0.0;
                        break;
                    default:
                        break;
                }

                numXsung += (num * score);
                sumNum += num;

            }
        }
        System.out.println(numXsung / sumNum);
    }
}

어떻게 풀면 좀 더 간단하게 풀 수 있을까 해서 다른 사람의 코드를 참고하여 푼 방법이다. Switch-case 구문을 이용하였으며, P 가 아닌 경우 반복을 진행해 값을 구하는 방식이다. 물론 해당 풀이도 좋지만 내 뜻대로 생각하며 풀어보고 싶었고 아래가 해당 풀이이다.

두 번째 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

        Double[] num = {4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0.0};
        String[] grade = {"A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F", "P"};

        double sumNum = 0;
        double totalGrade = 0;

        for (int i = 0; i < 20; i++) {
            StringTokenizer st = new StringTokenizer(input.readLine());
            String name = st.nextToken();
            double realNum = Double.parseDouble(st.nextToken());
            String realGrade = st.nextToken();

            if (!realGrade.equals("P")) {
                int index =0;

                // 인덱스 찾기 -> num 매칭 시키기 위한
                for (int j = 0; j < grade.length; j++) {
                    if (grade[j].equals(realGrade)){
                        index = j;
                    }
                }

                totalGrade += (realNum * num[index]);
                sumNum += realNum;
            }
        }
        System.out.println(totalGrade/sumNum);
    }
}

input 값으로 받는 데이터에서 성적이 'P' 가 아닐 경우 받은 데이터의 학점(realNum)성적(realGrade) 의 곱을 전부 더하도록 했다.

근데 이때, 입력받은 성적에 해당하는 실제 점수로 반환한 뒤 계산을 진행해야 하기에 들어온 input 성적 값을 미리 만들어 둔 grade 배열 속에서 찾은 뒤, 그 값의 배열 인덱스를 이용해 num 배열의 인덱스로 대입해 숫자로 바꾸는 과정을 거쳤다.

0개의 댓글