Algorithm/Java

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

보라해바라기 2023. 5. 15. 10:01
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