25206번: 너의 평점은
인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다! 치
www.acmicpc.net
문제가 상당히 지저분하다 해야할까.. input 값부터 어지럽다. 문제를 살펴보면.
첫번째로 궁극적으로 구하는것은 전공평점 = (학점 x 과목평점) / 학점의 총합이다.
그 다음으로 input값을 살펴보면 ObjectOrientedProgramming 3.0 A+ ... 이런식으로 쭉 input 받았다.
input 값이 띄어쓰기 기준으로 과목명 학점 평점 순인 것을 알수있겠다.
구하는 것에는 학점 x 과목평점이 필요하니. 이 input 값에서 두번째 세번째 녀석들 가져와서 다뤄야겠다.
일단 여기까지는 문제를 파악했다.. 그 다음을 보면 p/np 과목은 계산에서 제외하라는 말이 있다.
이것도 꽤나 중요한 포인트인데, pass라는 평점을 받으면 계산에서 제외해야겠다 정도 마인드를 갖고 코드를 짜보자.
제일 중요한 포인트는 일단 input을 받아 띄어쓰기 기준으로 나눠주는 것..
split method를 사용해야겠다..! 배열을 활용하여 split하는게 깔끔하겠다.
배열의 각각 인덱스에 쪼개진 과목명, 학점, 평점이 있으니
그 인덱스들을 각각 학점 배열, 평점 배열에 나눠 담는다.
하지만 평점배열은 A+와 같은 문자열이기에 이를 문제 조건에 맞게 평점점수로 환산한 후
(여기서 pass과목을 계산하지 않게 추릴 건데 난 그냥 평점을 7.0같이 이상한 평점으로 주고, 그 7.0을 필터링 하는 방식으로 계산에서 제외했다.)
우리가 궁극적으로 구하는 값을 내면 문제는 끝.
이렇게 변수가 많고 복잡할땐 한국말 변수를 활용하여 헷갈리지 않게 하는게 좋겠다.
split을 활용한 input값 다루기를 기억하자!
package 백준;
import java.util.Scanner;
public class _25206_너의평점은 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double[] 학점 = new double[20];
String[] 평점 = new String[20];
double[] 환산평점 = new double[20];
double 학점의합 =0;
double 평점의합 =0;
//띄어쓰기를 기준으로 다른 type의 배열에다가 넣기
for(int i=0; i<20; i++) {
String input = sc.nextLine();
//parts라는 배열에 input된 string을 나눠 담을것.
String[] parts = input.split(" ");
학점[i] = Double.parseDouble(parts[1]);
평점[i] = parts[2];
}
//평점의 알파벳을 점수로 환산
for(int i=0; i<20; i++) {
if(평점[i].equals("A+")) {
환산평점[i] = 4.5;
}
else if(평점[i].equals("A0")) {
환산평점[i] = 4.0;
}
else if(평점[i].equals("B+")) {
환산평점[i] = 3.5;
}
else if(평점[i].equals("B0")) {
환산평점[i] = 3.0;
}
else if(평점[i].equals("C+")) {
환산평점[i] = 2.5;
}
else if(평점[i].equals("C0")) {
환산평점[i] = 2.0;
}
else if(평점[i].equals("D+")) {
환산평점[i] = 1.5;
}
else if(평점[i].equals("D0")) {
환산평점[i] = 1.0;
}
else if(평점[i].equals("F")) {
환산평점[i] = 0.0;
}
else if(평점[i].equals("P")) { //평점이 pass일 경우 의미가 없다.
환산평점[i] = 7.0; //일단 7로 설정.
}
}
for(int i=0; i<20; i++) {
if(환산평점[i] != 7.0) {
학점의합 = 학점의합+학점[i];
평점의합 = 평점의합 +(학점[i]*환산평점[i]);
}
else {
continue;
}
}
System.out.println(평점의합/학점의합);
sc.close();
}
}
'Algorithm_PS' 카테고리의 다른 글
백준_2745 <진법 변환> (1) | 2023.10.26 |
---|---|
백준_2563 <색종이> (0) | 2023.10.20 |
백준_10798(세로읽기) (0) | 2023.10.19 |
백준_2941(크로아티아 알파벳) (0) | 2023.10.18 |
백준_10811 (바구니 뒤집기) (0) | 2023.10.16 |