반응형
https://www.acmicpc.net/problem/1546
문제 해설
전에 했던 최댓값 구하기를 통해 최댓값을 구한 후 문제에 제시된 식 대로 점수를 조작한 후 평균을 구하면 될 거 같다.
해결 방법
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
int[] num = new int[count];
StringTokenizer st = new StringTokenizer(br.readLine()," ");
// StringTokenizer로 분리하여 배열에 저장
for (int i = 0; i < num.length; i++) {
num[i] = Integer.parseInt(st.nextToken());
}
int max = 0;
// 반복문을 통해 맥스값 도출
for(int i = 0 ; i < num.length ; i++) {
if(max < num[i]) {
max = num[i];
}
}
// 반복문을 통해 sum 도출
double sum = 0; // 소수점 자리까지 계산하기 위해서 sum을 double로 선언해야함
for(int i = 0 ; i < num.length ; i++) {
sum += (double)num[i]/(double)max*100;
}
bw.write(String.format("%f", (double)sum/(double)num.length));
br.close();
bw.flush();
bw.close();
}
}
이번 문제를 풀면서 새롭게 알아낸 개념들이 있다.
1. BufferdWrite.write()는 값을 출력할 때 유니코드 형식으로 출력한다.
처음에는 bw.write((double) sum.(double) num.length)); 이런 식으로 작성하니 숫자 값이 나오지 않고 이상한 문자가 출력되었었다. 이상해서 인터넷 서칭을 해보니 write() 메서드는 유니코드 화하여 출력된다는 사실을 알았다.
숫자를 출력시킬 때는 위와 같은 형식으로 출력해야 한다.
2. 숫자 간의 형 변환
점수 값을 조작할 때 double로 형 변환하지 않고 int형끼리 계산을 했었다. ex) num [i]/max*100
그러다 보니 소수점 자리가 출력되지 않아서 계속 0이 찍혔었다. 이거 때문에 조금 늦어졌다.
다음엔 주의하자.
백준 알고리즘을 풀며 느끼는 거지만 단순히 알고리즘 공부뿐만 아니라 기본을 연마하게 되는 거 같다.
형 변환 또는 입출력 등
국비를 통해 게시판만 만들 줄 알던 나에게 백준 알고리즘 아주 좋은 학습이 되는 거 같다.
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준 알고리즘][자바] 11720번 : 숫자의 합 (0) | 2021.03.05 |
---|---|
[백준 알고리즘][자바] 4344번 : 평균은 넘겠지 (0) | 2021.03.04 |
[백준 알고리즘][자바] 2562번 : 최댓값 (0) | 2021.03.02 |
[백준 알고리즘][자바] 10818번 : 최소, 최대 (0) | 2021.01.19 |
[백준 알고리즘][자바] 1110번 : 더하기 사이클 (0) | 2021.01.14 |
댓글