구현 자체는 간단했지만 소수 계산이나 문자열 비교 때문에 번거로웠던 문제
앞서 말한 소수 계산, 문자열 비교를 용이하게 하기 위해 BigDecimal이라는 새로운 클래스를 도입하는 것이 필요했다
BigDecimal은 자바에서 정밀한 소수점 계산을 할 때 사용하는 클래스로,
나는 equals 외에도 add, subtract, multiply, divide 메서드를 사용했다
메서드
a.equals("string")
: a와 string이 같은지 비교
a.add(b)
: a에 b를 더함
a.subtract(b)
: a에서 b를 뺌
a.multiply(b)
: a와 b를 곱함
a.divide(b, 6, BigDecimal.ROUND_HALF_UP)
: a를 b로 나눔, 이때 나누어떨어지지 않는 연산의 경우 소수점 몇 자리까지 반올림/올림/버림 등을 할 것인지 지정해 줘야 함(앞 코드에서는 소수점 일곱 번째 자리에서 반올림하여 소수점 이하 6개의 숫자만 출력되도록 함)
divide를 사용하려는데 나누어떨어지는 값이 아닐 때 소수점을 파라미터로 넣지 않으면
어떤 수를 0으로 나눴을 때 발생하는 예외인 arithmeticException이 발생한다
백준 25206 정답 코드
import java.io.*;
import java.math.BigDecimal;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
BigDecimal sum = new BigDecimal("0.0");
BigDecimal numSum = new BigDecimal("0");
for (int i=0; i<20; i++) {
st = new StringTokenizer(br.readLine());
BigDecimal score = new BigDecimal("0.0");
st.nextToken();
BigDecimal num = new BigDecimal(st.nextToken());
String grade = st.nextToken();
if (grade.equals("A+")) {
score = new BigDecimal("4.5");
} else if (grade.equals("A0")) {
score = new BigDecimal("4.0");
} else if (grade.equals("B+")) {
score = new BigDecimal("3.5");
} else if (grade.equals("B0")) {
score = new BigDecimal("3.0");
} else if (grade.equals("C+")) {
score = new BigDecimal("2.5");
} else if (grade.equals("C0")) {
score = new BigDecimal("2.0");
} else if (grade.equals("D+")) {
score = new BigDecimal("1.5");
} else if (grade.equals("D0")) {
score = new BigDecimal("1.0");
} else if (grade.equals("F")) {
score = new BigDecimal("0.0");
}
if (!grade.equals("P")) {
sum = sum.add(score.multiply(num));
numSum = numSum.add(num);
}
}
System.out.println(sum.divide(numSum, 6, BigDecimal.ROUND_HALF_UP));
br.close();
bw.flush();
bw.close();
}
}
난 이렇게 무식하게 했는데 배열, 리스트, 맵 등을 사용해서 평점과 등급 비교문의 길이를 줄일 수 있다.
'Programming Language > Java' 카테고리의 다른 글
[Java] 백준 BOJ 1929: 소수 구하기 (0) | 2024.03.10 |
---|---|
[Java] 백준 BOJ 14425: 문자열 집합 (0) | 2024.02.27 |
[Java] 백준 BOJ 10811: 바구니 뒤집기 (1) | 2024.01.26 |
[Java] 백준 BOJ 10810: 공 넣기, 배열 선언 시 Integer과 int의 차이 (0) | 2024.01.19 |
[Java] 백준 BOJ 2745: 진법 변환 (0) | 2024.01.09 |