포스트

solved.ac(18110)

solved.ac(18110)

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
35
36
37
import java.io.*;
import java.util.*;

public class Main{
  public static void main(String[] args) throws IOException {
      
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    StringBuilder sb = new StringBuilder();
    
    int n = Integer.parseInt(br.readLine());
    
    int[] arr = new int[n];
    
    for(int i = 0; i < n; i++){
      arr[i] = Integer.parseInt(br.readLine());
    }
    
    Arrays.sort(arr);
    
    int cut = (int)Math.round(n * 0.15);
    double sum = 0;
    
    for(int i = cut; i < n - cut; i++){
      sum += arr[i];
    }
    
    int avg = (int)Math.round(sum / (n - cut * 2));
    
    sb.append(avg);
    
    bw.write(sb.toString());
    bw.flush();
    bw.close();
    br.close();
  }
}

풀이과정

  1. 형변환에 유의하며 문제를 풀었다
  • 성공
  • 메모리 : 38064 KB
  • 시간 : 364 ms

보안점

  1. 다른 사람의 풀이를 보면 score의 범위로 배열을 잡고, 입력된 값에 따라 해당 인덱스의 값을 1씩 증가시켜 총 입력갯수를 정했다.
  2. 이렇게 하면, 배열 정렬이 필요없고 바로 최소값과 최대값을 알 수 있게 된다.
  3. 코드의 간결함과 직관성으로는 내 풀이 방식이 좋아보이고, 메모리와 응답시간의 효율을 위해서는 배열의 정렬이 필요없는 다른 방식의 풀이도 좋아보였다.