반응형

1. 문제 번호 25206번


 

 

 

2. 문제 풀이

 

 

 

한줄 평가

 - 

 

 

 

문제를 먼저 정확히 파악

 

 - (학점 * 등급별 점수) / 학점

예시 ) 자바 프로그래밍 3.0 학점 A+, 파이썬 3.0 C0  

         ( (3.0*4.5)+(3.0*2.0) ) / 6 

         = 평균 3.25 

 

 

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

 

 

  1. Map 에 등급별 점수를 리스트
  2. 한 줄 입력시 누적하며 값들을 저장
  3. 총 계산 후 출력

 

 

 

난 이런게 더 쉽다..ㅠㅠㅜㅜ

어제 연인과 이런 대화를 했다. 모든건 상대적이고, 각자의 장단점이 다 다르다.

나에게는 지독하게 어려운게 누군가에는 당연하고 쉬울수도.. 😊

 

 

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Map<String, Double> gradeScoreMap = new HashMap<>();

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

        for (int i = 0; i < grade.length; i++) {
            gradeScoreMap.put(grade[i], gradeScore[i]);
        }

        String inputLine;

        double totalCredits = 0.0;
        double totalWeightedScores = 0.0;

        while ((inputLine = br.readLine()) != null) {
            String[] inputAry = inputLine.split(" ");
            double credits = Double.parseDouble(inputAry[1]);
            String gradeReceived = inputAry[2];

            if (!gradeReceived.equals("P")) {
                totalCredits += credits;
                if (gradeScoreMap.containsKey(gradeReceived)) {
                    totalWeightedScores += credits * gradeScoreMap.get(gradeReceived);
                }
            }
        }

        System.out.printf("%.6f%n", totalWeightedScores / totalCredits);
    }
}

 

 

 

- 실패 소스코드 -


더보기
import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        Map<String,Double> gradeScoreMap = new HashMap<>();
        
        String [] grade = {"A+","A0","B+","B0","C+","C0","D+","D0","F"};
        Double [] gradeScore = {4.5,4.0,3.5,3.0,2.5,2.0,1.5,1.0,0.0};

        for(int i = 0; i < grade.length; i++){
            gradeScoreMap.put(grade[i],gradeScore[i]);
        }

        String inputLine = null;

        int subjectCnt = 0;
        Double subjectCredit = 0.00; //학점
        Double subjectScore  = 0.00; //학점*등급점수
        
        while((inputLine=br.readLine())!=null){
            String [] inputAry = inputLine.split(" ");
            for(int i = 0; i < inputAry.length ; i++){
                subjectCnt += 1;
                subjectCredit += Double.valueOf(inputAry[1]);
                
                if(gradeScoreMap.containsKey(inputAry[2])){
                    subjectScore += Double.valueOf(inputAry[1]) * gradeScoreMap.get(inputAry[2]);
                };
                
            }
        }

        System.out.println((subjectScore)/subjectCredit);
        

        
    }
}

 

 


4. 추가 개념

'double' vs 'Double'

기본 데이터 타입(primitive type) vs 객체 데이터 타입 (Wrapper Class)
기본 메모리 타입이 메모리,성능 측면에서 효율적
객체 데이터 타입은 'null' 값을 가질 수 있다.

'Double.parseDouble(String)' -> 기본 데이터 타입 Convert
'Double.valueOf(String)' -> 객체 데이터 타입 Convert  

 

'.equals' vs '=='

'==' 객체에서는 동일 주소를 비교
'.equals' 는 객체 타입에서 값을 비교

 

 

 

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 

 

728x90
반응형

+ Recent posts