https://www.acmicpc.net/problem/1546
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class B1_1546 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] grade = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
// 공백으로 나눠서 배열에 입력
for (int i = 0; i < N; i++) {
grade[i] = Integer.parseInt(st.nextToken());
}
int M = grade[0];
double[] grade_d = new double[N];
double sum = 0;
// 최댓값 구하기
for (int g : grade) {
if (g > M) {
M = g;
}
}
// 점수 배열 변환
for (int i = 0; i < N; i++) {
grade_d[i] = (double) grade[i] / M * 100;
}
// 합 구하기
for (double d : grade_d) {
sum += d;
}
System.out.println(sum / N);
}
}
과목 개수 int N 입력 받기
현재 성적 입력받아서 int[]에 넣기
M 최댓값
sum 합
for(int[] 돌면서)
더 크면 M에 저장
for(int[] 돌면서)
점수 = 점수/M*100
for(int[] 돌면서)
합 += 점수
print 점수/N
처음에는 이렇게 int 배열 내에서 변환하려고 했는데 정수로 나누고 하다보니 0이 나왔다...생각해보니 당연함...
double 배열을 새로 만들어서 계산해야 올바른 값이 나온다.
과목 개수 int N 입력 받기
현재 성적 입력받아서 int[]에 넣기
double[] 선언
M 최댓값
sum 합
for(int[] 돌면서)
더 크면 M에 저장
for(i 돌면서)
점수 = 점수/M*100 로 double[] 에 넣기
for(int[] 돌면서)
합 += 점수
print 점수/N
[Do it! 알고리즘 코딩 테스트 자바편]
1. 문제 분석 & 풀어보기
일일이 변환 점수를 구할 필요 없이 한번에 올바른 값을 구할 수 있다.
(A + B + C) * 100 / M / 3
-> (A / M * 100 + B / M * 100 + C / M * 100) / 3
1) 점수를 1차원 배열에 저장
2) 배열을 탐색하며 최고 점수와 총합
3) 총합 * 100 / 최고 점수 / 과목 수
2. 슈도코드
변수 N에 과목 수 입력받기
길이가 N인 A[] 선언
for(A[] 길이)
A[i]에 각 점수 저장
for(A[] 길이)
max에 최댓값, sum에 총점 저장
sum * 100 / max / N 출력
3. 코드
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int A[] = new int[N];
for (int i = 0; i < N; i++) {
A[i] = sc.nextInt();
}
long sum = 0;
long max = 0;
for (int i = 0; i < N; i++) {
if (A[i] > max) max = A[i];
sum += A[i];
}
System.out.println(sum * 100.0 / max / N);
자동 타입 변환
double d1 = 5 * 3.14;
double d2 = 1;
이렇게 하면 int가 double로 자동 타입 변환된다.
기초 타입 범위
double > float > long > int > short, char > byte