[백준] n.1546 - 조작된 평균 구하기

    SMALL

    1. 문제

    https://www.acmicpc.net/problem/1546

     

    1546번: 평균

    첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보

    www.acmicpc.net

    - 조작된 평균 : (점수/점수 최댓값)*100


    2. 주요 개념

    - 1차원 배열

    - float 와 연산자의 관계

    - 스캐너

    - 최댓값 구하는 알고리즘


    3. 나의 풀이 (*은 잘 안풀린 부분)

    import java.io.*;
    import java.util.*;
    
    public class Main {
    
      public static void main(String[] args) {
    
        Scanner s = new Scanner(System.in);
    
        int n, i;
        n = s.nextInt();
        // n: 시험 과목 갯수
        
        float max = 0;
        // max: 시험 최댓값 (**float)
        // 최댓값 기본은 0으로 설정
        
        float sum = 0;
        // sum: 조작된 점수의 합 (**float)
    
        //**float 
        // why? int에서 "/" 사용하면 정수 값 출력
        // 우리는 소수값 필요 (float 사용해야 출력 可)
        float[] score = new float[n];
        float[] score_new = new float[n];
          
        for (i=0; i<n; i++) {
          score[i] = s.nextFloat();
          // float 형태로 값 받아주기!
        }
        
        for (i=0; i<n; i++) {
          if (max <= score[i]) {
            max = score[i];
          }
        }
        
        for (i=0; i<n; i++) {
          score_new[i] = (score[i]/max)*100;
          // System.out.println(score_new[i]);
          sum += score_new[i];
        }
    
        System.out.println(sum/n);
        
      }
    
    }


    4. 짚고 넘어가기!

    - int 사용 시, 정수/정수 = 정수

    - 우리는 나누기 연산 시, 소수점을 구하려고 함 (ex. 40/80 = 0.5 ..)

    - float를 이용하여야 소수점 구하기 가능!

    > 시험 점수와 관련된 모든 요소들을 float 형태로 생성

    > 시험 점수  s.nextFloat()

    > 점수 들어가는 배열  float[] score = new float[n]

    > 조작된 점수가 들어가는 배열  float[] score_new = new float[n]

     

     

    728x90

    댓글