https://www.acmicpc.net/problem/25305
정렬을 하는 방법이 이 문제의 핵심이다. 내림차순으로 정렬하고, (상을 받는 사람의 수) - 1 에 해당하는 index 인 값을 출력하면 된다. 하지만 Collections.sort() 의 기본 정렬방식은 오름차순이다.
3가지 방법이 있다.
- Collections.reverseOrder() 사용하기
- Comparator 만들어서 사용하기
- 람다 함수 이용하기
1. Collections.reverseOrder() 사용하기
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
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));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
ArrayList<Integer> list = new ArrayList<>(N);
int cut_index = Integer.parseInt(st.nextToken());
StringTokenizer st2 = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++)
{
list.add(Integer.parseInt(st2.nextToken()));
}
// Collections.sort() 에 매개변수로 넣어준다.
Collections.sort(list, Collections.reverseOrder());
System.out.print(list.get(cut_index - 1));
}
}
2. Comparator 만들어서 사용하기
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
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));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
ArrayList<Integer> list = new ArrayList<>(N);
int cut_index = Integer.parseInt(st.nextToken());
StringTokenizer st2 = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++)
{
list.add(Integer.parseInt(st2.nextToken()));
}
// Comparator 를 익명객체로 만들어서 매개변수로 넣어준다.
Collections.sort(list, new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return o2 - o1; // 오름차순으로 정렬하기 위해 o2 - o1 을 return 한다.
}
});
System.out.print(list.get(cut_index - 1));
}
}
3. 람다 함수
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
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));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
ArrayList<Integer> list = new ArrayList<>(N);
int cut_index = Integer.parseInt(st.nextToken());
StringTokenizer st2 = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++)
{
list.add(Integer.parseInt(st2.nextToken()));
}
// 람다 함수를 매개변수로 넣어준다. 오름차순으로 정렬하기 위해 b - a 를 return 한다.
Collections.sort(list, (a, b) -> b - a);
System.out.print(list.get(cut_index - 1));
}
}
- 느낀 점
Comparator 와 Comparable 의 차이점을 알았고, 람다 함수의 사용을 오랜만에 해봤다.
'[JAVA] > 자바[JAVA] 백준' 카테고리의 다른 글
BOJ(백준 온라인 저지) 1463번 with 자바[JAVA] (0) | 2024.03.30 |
---|---|
BOJ(백준 온라인 저지) 1003번 with 자바[JAVA] (0) | 2024.03.28 |
BOJ(백준 온라인 저지) 2587번 with 자바[JAVA] (0) | 2024.03.24 |
BOJ(백준 온라인 저지) 19532번 with 자바[JAVA] (0) | 2024.03.24 |
BOJ(백준 온라인 저지) 10101번 with 자바[JAVA] (0) | 2024.03.18 |