문제 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 |