알고리즘/백준(BAEKJOON)

1546/평균/1차원 배열/자바/JAVA

jojelly 2021. 3. 15. 02:11
반응형

이 문제는

1. 첫줄에 과목의 갯수

2. 두번째 줄에 과목별 점수가 공백을 기준으로 나타내져 있다. 

3. 정답 출력값의 절대오차 또는 상대오차는 0^(-2), 즉 0.01 까지 허용한다.

4. 입력된 점수중 최대값을 찾고  각각의 과목들을   (과목/최대값)*100 처리를 한 후  나온 값들을 더해서 다시한번 과목의 갯수로 나눠 새로운 평균을 구해야한다. 

 

 

 


첫번째 방법은 scanner를 이용한 방법이다.

 

 

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
29
30
31
32
package exam.array;
 
import java.util.Arrays;
 
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        
        double [] array = new double[sc.nextInt()];
        
        for (int i = 0; i < array.length; i++) {
            array[i] = sc.nextDouble();
        }
        
        sc.close();
        
        Arrays.sort(array);
        double sum = 0;
        
        for (int i = 0; i < array.length; i++) {
            sum+= (array[i]/array[array.length-1]*100);
        }
        System.out.println(sum/array.length);
        
    }
 
}
 
cs

 

먼저 배열에 모든 원소를 입력받은 후  Arrays 패키지의 sort() 를 사용하여 정렬을 한다.

그러면 오름차순으로 정렬이 되고 최댓값은 배열의 마지막 원소가 간다.

 

오차범위가 있기 때문에  최소 자료형 1개 이상은 double 형으로 쓴다. 그러면 자동 형변환이 되면서 자료형이 큰 쪽으로 (int 에서 double) 변환이 된다.

 

 


두번째 방법은 bufferLeader를 이용한 방법이다. 

 

 

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
29
30
31
32
33
34
package exam.array;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
 
public class Main {
 
    public static void main(String[] args) throws IOException{
        // TODO Auto-generated method stub
        BufferedReader br = new BufferedReader((new InputStreamReader(System.in)));
 
    
        double[] array = new double[Integer.parseInt(br.readLine())];
 
        StringTokenizer st1 = new StringTokenizer(br.readLine()," ");
 
        for (int i = 0; i < array.length; i++) {
            array[i] = Double.parseDouble(st1.nextToken());
        }
 
        double sum = 0;
        Arrays.sort(array);
        
        for (int i = 0; i < array.length; i++) {
            sum += ((array[i]/array[array.length-1])*100);
            
        }
        System.out.println(sum/array.length);
    }
}
 
cs

 BufferLeader는 String 으로 들어오기때문에  double 형으로 바꾸려면 Double.parseDouble() 을 사용해야한다.

또한 공백을 포함하여 들어오기 때문에 문자열 분리를 위해 StringTokenizer로 나눠준다.

반응형