*모든 풀이는 현재 배운 것만 사용하여 풀이하므로 다른 분의 더 좋은 풀이가 많을 수 있습니다.
문제 :
============================================================================================
힌트 : Scanner 는 띄어쓰기와 개행문자로 입력을 구분하는 것을 이용해서 풀었습니다.
과목평점은 개수가 많으니 switch문을 사용했습니다. 소수점 계산을 해야하니 double 또는 float로 하였고 P / F 과목을 if 로 예외 처리 하였습니다.
===========================================================================================
풀이:
문제 입력대로 넣었을 시
ObjectOrientedProgramming1 3.0 A+
IntroductiontoComputerEngineering 3.0 A+
위 두줄 만 넣었다고 가정해보겠습니다.
과목명과 3.0 A+ 사이에는 띄어쓰기가 있으니 sc.next() 로 구분하여
str에는 과목명이 들어가게,
num에는 학점이 들어가게,
alph에는 과목평점이 들어가게 해놓았습니다.
이렇게 한 바퀴를 돌면 첫 줄 입력이 끝나고 두 번째 줄로 넘어가서 다시 str부터 받기 시작합니다.
switch 문으로 alph에 입력된 과목평점 알파벳으로 값을 넣어주고 switch문이 끝날 때 마다 학점 * 과목평점과 학점 총합을 계산하게 됩니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str; //입력 과목명
double num=0; //입력 학점
String alph; //입력 과목평점 값
double score = 0; //A+ = 4.5, A = 4.0 ....과목평점을 점수로환산
double result = 0; //학점 * 과목평점
double sumNum = 0; // 학점 총합
for(int i = 0; i<20; i++) {
str=sc.next();
num=sc.nextDouble();
alph=sc.next();
switch(alph) { //과목평점 구분
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;
}//end switch
if(!(alph.equals("P"))) { // P or F 과목은 제외
result+=num*score;
sumNum+=num;
}
}///end for
System.out.printf("%.6f",result/sumNum); //소수점 6자리까지 출력
}//end main
}//end Main
'백준 문제풀이' 카테고리의 다른 글
[백준] 1032번 문제풀이 (0) | 2024.02.20 |
---|---|
[백준] 1920번 문제풀이 (0) | 2024.02.10 |
[백준]10828번 문제풀이 (0) | 2024.02.05 |
[백준]1157번 문제 풀이 (0) | 2024.01.29 |
[백준] 3052번 문제 풀이 (2) | 2024.01.28 |