문제
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);
}
}

'문제 풀이' 카테고리의 다른 글
[백준] 2566번: 최댓값 - JAVA(자바) (0) | 2023.08.21 |
---|---|
[백준] 2738번: 행렬 덧셈 - JAVA(자바) (0) | 2023.08.21 |
[백준] 2941번: 크로아티아 알파벳 - JAVA(자바) (0) | 2023.08.10 |
[백준] 10988번: 팰린드롬인지 확인하기 - JAVA(자바) (0) | 2023.08.09 |
[백준] 1157번: 단어 공부 - JAVA (자바) (0) | 2023.08.09 |