본문 바로가기

건승하고있어요/알고리즘

[if] 평균구하기

반응형

문제: 세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최대값을 골랐다. 이 값을 M이라 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다. 예를 들어 세준이의 최고점이 70점이고 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다. 세준이의 성적을 위의 방법대로 새로 계산했을 때 새로운 평균을 구하는 프로그램을 작성하시오.

(출처: https://www.acmicpc.net/problem/1546)



잊지말자 ★데이터타입★


순전히 자료형 생각 못해서 자꾸 바보같이 굴었던 문제.


for(int i=0 ; i<N ; i++) {
            array[i] = (array[i]/M)*100;
            a+=array[i];
        }


문제가 됐던 부분이다. 이부분만 지나면 가장 큰 수를 제외하고는 모두 0이 되는 기적..

도대체 이해가 안 됐다. 왜 자꾸 여기만 지나면 0이 되는가ㅠ_ㅠ 바보멍청이

당연히 int 60을 int 80으로 나누니까 0이나오지ㅠ_ㅠ 바보야! 바보야!!


        double array[] = new double [N];
지금 이 코드에서는 배열을 double로 선언했지만 처음엔 int로 받았다.
점수니까 당연히 그렇겠거니 했는데, 바보같이!! 바보같이!!!!!
그러니 당연히 계속 0이 나오지ㅠ0ㅠ
더블로 바꾸자 모든 것이 해결되었습니다.

(int는 정수형이기 때문에 0.xxxxxxxx가 답이라면 x는 다 빠지고 0만 나오기 때문입니다. 그렇기 때문에 실수를 받을 수 있는 double로 선언해주어야  하는거십니다니다니다니다.)

그리고 소수점을 원하는 형식으로 출력하는 방법
printf로 정해주는 방법도 있지만, DecimalFormat이라는 클래스가 있다.

DecimalFormat form = new DecimalFormat("#.##");
int num = a/N
form.format(num);


#.##은 소숫점 2째자리까지 보여달라는 말이다. 

#.###하면 3자리, #.###### 하면 6자리가 나온다. 



보면 61.90이 나와야 하는데 마지막 0이라 알아서 빼고 출력해준 모양..

사실은 저렇게 긴 답인데 뚝 잘라줬다. 고마워 데시말!!!



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.text.DecimalFormat;
import java.util.Scanner;
 
public class TestRecord2 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        double array[] = new double [N];
        double M = array[0];
        for(int i=0 ; i<N ; i++) {
            array[i] = scan.nextInt();
            if(M < array[i]) {
                M = array[i];
            }
        }
        double a = 0;
        for(int i=0 ; i<N ; i++) {
            array[i] = (array[i]/M)*100;
            a+=array[i];
        }

        DecimalFormat form = new DecimalFormat("#.##");
        System.out.println(form.format(a/N));
        scan.close();
    }
 
}
 
cs


반응형

'건승하고있어요 > 알고리즘' 카테고리의 다른 글

[1차원배열] 숫자의 개수  (2) 2018.02.07
[if] X보다 작은 수  (2) 2018.02.07
[queue] 큐 기본문제와 상속  (8) 2018.02.06
[for] 열 개씩 끊어 출력하기  (9) 2018.02.05
[stack] 스택 기본문제  (2) 2018.02.04