[JAVA] 백준 1546: 평균

바위너구리·2022년 11월 22일
0

백준 풀이🐬

목록 보기
2/17
post-thumbnail

문제

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

0개의 댓글