본문 바로가기
백준

백준 18310 안테나

by 콩순이냉장고 2021. 11. 25.

문제 URL : https://www.acmicpc.net/problem/18310

 

18310번: 안테나

첫째 줄에 집의 수 N이 자연수로 주어진다. (1≤N≤200,000) 둘째 줄에 N채의 집에 위치가 공백을 기준으로 구분되어 1이상 100,000이하의 자연수로 주어진다.

www.acmicpc.net

문제 접근법 : 

우선 정렬을먼저하고

개수가 홀수일때와 짝수일때의 기준으로 나눴는데 홀수있때는 중앙에 있는것이 최소가 되겠쬬?

 

그럼 짝수일때는 중앙이 2개가존재하는데 n/2 와 n/2 -1 을 비교하여 결과값을 출력해주면 됩니다.

 

소스코드 : 

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
38
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
 
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));
        int n =Integer.parseInt(br.readLine());
        StringTokenizer st= new StringTokenizer(br.readLine());
        Integer arr[] = new Integer[n];
        for(int i=0;i<n;i++)
            arr[i]=Integer.parseInt(st.nextToken());
        Arrays.sort(arr);
        int sum=0;
        if(n%2==0) {
            int sum2=0;
            int mid=n/2-1;
            int mid2=n/2;
            for(int i=0;i<n;i++) {
                sum+=Math.abs(arr[i]-arr[mid]);
                sum2+=Math.abs(arr[i]-arr[mid2]);
            }
            if(sum<=sum2)
                System.out.println(arr[mid]);
            else
                System.out.println(arr[mid2]);
            
        }else {
            System.out.println(arr[n/2]);
        }
    }
}
 
cs

 

궁금한점 혹은 모르는점 어떤 질문이든 댓글은 언제나 환영입니다.

 

'백준' 카테고리의 다른 글

백준 2933 미네랄  (0) 2021.11.29
백준 1244 스위치 켜고 끄기  (0) 2021.11.25
백준 13417 카드 문자열  (0) 2021.11.25
백준 17089 세 친구  (0) 2021.11.25
백준 4991 로봇 청소기  (0) 2021.11.19