문제 풀이

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

auyeol 2023. 8. 11. 18:09
728x90

 

문제

 

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

 

25206번: 너의 평점은

인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다! 치

www.acmicpc.net

 

한 줄에 전공과목명, 학점, 등급이 공백으로 구분되어 있으며, 20줄을 입력한다. 입력한 학점과 등급에 따른 전공평점을 구하는 문제이다.

 

 +) P/F 과목인 경우 등급이 P인 과목은 계산에서 제외해야 한다.

 

[입력]

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

[출력]

3.284483

 

------------------------------------------------------------------------------------------------------------------

 

 

풀이

전공평점을 계산하기 위한 공식은 (학점 x 과목평점) / 학점의 총합이다.

 

따라서 학점 x 과목평점의 값을 저장할 result변수, 학점의 총합을 구할 credit_sum을 double형으로 선언하였다.

 

for문을 20번 실행하도록 한 뒤, 학점을 저장할 credit 변수, 등급에 따른 점수를 저장할 grade 변수를 선언하였다.

 

이후, split(" ")을 이용하여 공백을 기준으로 String 배열에 저장되게 하였다. 

      ex) Database 3.0 B0가 입력된 경우 str_arr[0] = Database, str_arr[1] = 3.0, str_arr[2] = B0 

 

전부 다 문자열이기 때문에 학점(credit)은 Double.parseDouble()을 통해 Double형으로 변환, 등급은 charAt()을 이용하여 Char형으로 변환하였다. 

 

switch case문을 이용하여 변환된 등급에 따른 점수를 grade에 저장하게 하였다.

 

+) P인 과목은 계산에서 제외해야 하므로 credit = 0으로 변경시키게 하였다.

 

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);

		double result = 0, credit_sum = 0; // result = 학점*과목평균, credit_sum = 학점의 총합
		char c;
				
		for(int i=0;i<20;i++) {
			double credit = 0; // 학점
			double grade = 0; // 등급에 따른 점수
			
			String str_arr[] = sc.nextLine().split(" ");
			credit += Double.parseDouble(str_arr[1]);
			c = str_arr[2].charAt(0);
			
			switch(c) {
			case 'A':
				if(str_arr[2].charAt(1) == '+') grade += 4.5;
				else grade += 4.0;
				break;
			case 'B':
				if(str_arr[2].charAt(1) == '+') grade += 3.5;
				else grade += 3.0;
				break;
			case 'C':
				if(str_arr[2].charAt(1) == '+') grade += 2.5;
				else grade += 2.0;
				break;
			case 'D':
				if(str_arr[2].charAt(1) == '+') grade += 1.5;
				else grade += 1.0;
				break;
			case 'F':
				grade += 0;
				break;
			case 'P':
				grade += 0;
				credit = 0;
				break;
			}
			credit_sum += credit;
			result += credit*grade;
		}
		sc.close();

		System.out.println(result/credit_sum);
	}
}

 

 

728x90