[백준] 25206: 너의 평점은 - JAVA[자바]

다인·2024년 7월 8일

백준

목록 보기
7/112
post-thumbnail

switch문은 너무 일차원적이라서 등급과 평점을 다른 배열에 저장해두고, 해당 등급을 갖는 인덱스 값을 이용해서 평점 배열에서 평점을 찾는 식으로 코드를 짜 보았다.
글을 작성하면서 2차원 배열로도 할 수 있지 아늘까 싶었는데 타입이 다르네,, 지피티한테 물어보니까 객체 배열을 사용하라네? 음 썩 좋은 방법 같진 않아서 java 더 공부하며 고민해 봐야겠다🤔

import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String gradeList[] = {"A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F"};
        double creditList[] = {4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0.0};
        double total_credit = 0;
        double score = 0;

        for(int i=0; i<20; i++){
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            st.nextToken();
            double credit = Double.parseDouble(st.nextToken());
            String grade = st.nextToken();

            if(grade.equals("P"))
                continue;
            total_credit += credit;
            int gradeToCredit = Arrays.asList(gradeList).indexOf(grade);
            score += credit * creditList[gradeToCredit];
        }
        System.out.println(score / total_credit);
    }
}

🟣 grade.equals("P")
➡️ 처음에 grade == "P"를 사용했는데, 자바에서는 문자열 비교 시 == 연산자는 문자열의 내용이 아닌 참조를 비교하므로, 두 개의 서로 다른 객체가 동일한 문자열 값을 가지고 있어도 == 연산자는 false를 반환할 수 있다!

🟣 Arrays.asList(gradeList).indexOf(grade);
➡️ 입력받은 등급을 gradeList에서 찾아 해당 인덱스를 뽑고, 그 인덱스를 활용하여 creditList에서 평점을 찾을 때 for문으로 배열을 다 순회하는 것이 아닌, indexOf 메서드를 사용하였다. 하지만 indexOf()는 String 타입과 List 계열의 타입에서만 사용 가능하다. 따라서 배열에서 indexOf()를 사용하려면 이를 List타입으로 변환해 주어야 한다.

0개의 댓글