목차
문제 : boj25206
필요 알고리즘
- 구현, 문자열
- 문자열을 잘 파싱해서 문제에서 제시된대로 구현해주는 문제이다.
※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.
풀이
구현 로직은 다음과 같다.
1. 20줄 각각을 받으면서 첫 번째 문자는 필요없으니 버리고, 세 번째 입력값이 'P' 라면 다음 줄로 넘어간다.
2. 2번째 값을 double로 받은걸 grade, 3번째는 double로 과목평점을 변환해서 받은걸 rating 이라 하자.
3. grade 값의 합을 따로 계산한다(코드의 gradeSum). grade * rating의 합도 따로 계산한다(코드의 sum)
4. sum / gradeSum을 소수점 4자리 이상 출력한다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws Exception {
new Main().solution();
}
private void solution() throws Exception {
double gradeSum = 0;
double sum = 0;
int line = 20;
while (line-->0) {
StringTokenizer st = new StringTokenizer(br.readLine());
st.nextToken();
double grade = Double.parseDouble(st.nextToken());
Double rating = getRating(st.nextToken());
if (rating == null) continue;
sum += grade * rating;
gradeSum += grade;
}
System.out.printf("%.5f\n", sum / gradeSum);
}
private Double getRating(final String s) {
switch (s) {
case "A+" : return 4.5;
case "A0" : return 4.0;
case "B+" : return 3.5;
case "B0" : return 3.0;
case "C+" : return 2.5;
case "C0" : return 2.0;
case "D+" : return 1.5;
case "D0" : return 1.0;
case "F" : return 0.0;
}
return null;
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 27959 - 초코바 (java) (0) | 2023.04.19 |
---|---|
[자바] 백준 16099 - Larger Sport Facility (java) (0) | 2023.04.19 |
[자바] 백준 15025 - Judging Moose (java) (0) | 2023.04.14 |
[자바] 백준 3359 - 사각 사각 (java) (0) | 2023.04.13 |
[자바] 백준 18352 - 특정 거리의 도시 찾기 (java) (0) | 2023.04.12 |
댓글