그리디 알고리즘, 정렬을 사용했다.
우선 가장 먼저 든 생각은 가운데 값을 찾는 것이었다. 그런데 다시 생각해보니 반례가 있을 것 같았다. 그래서 우선 보류해 두고 이분탐색을 고려했다.
이분탐색을 고려했었지만 이분탐색으로는 풀기 어려움을 깨달았다. 여기서 문제의 난이도가 실버 3임을 인지하고 쉽게 생각하기로 마음먹었다. 그래서 처음의 생각인 중앙값을 찾는 것의 반례가 있을까 직접 극단적인 좌표를 생각해보고 그려봄으로써 중앙값을 찾는 것에서 반례가 없음을 알았다.
그래서 최종적으로 solution . 중앙값을 찾는다.
시간 복잡도는 자료를 정렬하는데에 O(nlogn) 이고, n은 200,000 이다. 제한시간이 1초이므로 시간은 충분하다.
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));
StringBuilder sb=new StringBuilder();
StringTokenizer st;
int n=Integer.parseInt(br.readLine());
st=new StringTokenizer(br.readLine());
int arr[]=new int[n];
for(int i=0;i<arr.length;i++)
arr[i]=Integer.parseInt(st.nextToken());
Arrays.sort(arr);
if(arr.length%2!=0) {
System.out.println(arr[arr.length/2]);
}
else {
System.out.println(arr[arr.length/2-1]);
}
}
}
테스트케이스에만 있는 것으로 판별하려 하지 말자. 직접 테스트케이스를 만들어 봄으로써 반례를 생각하고 사고하는 힘을 키우자.
(~ 한계. ) 결국 문제의 난이도를 보고 난이도에 따라서 solution을 생각한 것.. 코테에서 이건 실버 문제에요! 이건 골드 문제에요 ! 알려주는 것도 아닌데 좀 안일한 것 같다.
하루에 백준 1문제 이상 푸는 것을 목표로 하고있다.
https://solved.ac/profile/anwlro0212