728x90
https://www.acmicpc.net/problem/1946
풀이과정
- 받은 값을 2차원 배열에 저장한다. 배열의 값은 [서류순위, 면접순위]이다
- 서류순위를 기준으로 정렬한다
- 첫 번째 값의 면접순위를 maxInterviewRank로 저장한다
- 이 뒤로 나오는 값은 maxInterviewRank보다 무조건 작아야 뽑힐 수 있다
- 서류 순위가 1등인 애를 절대 이길 수 없기 때문에 면접 순위는 더 높아야함
- 면접순위가 1등인 애가 나올 때까지 중간 리스트들을 확인한다
- 면접순위가 1등인 애 이후는 면접순위 1등보다 서류순위가 낮은 친구들이기 때문에 전부 뽑힐 수 없는 애들이다. 고려하지 않음
- 중간 리스트들의 인터뷰순위를 maxInterviewRank와 비교하여 작으면 result에 추가시켜준다
- 작을 경우: 이 뒤로 나오는 값들은 서류순위가 나보다 안좋을 것이기 때문에 나보다 인터뷰 순위가 좋은 애들만 뽑힐 수 있다. 그러므로 maxInterviewRank를 내 인터뷰순위로 갱신해준다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int testCaseCnt = Integer.parseInt(st.nextToken());
for (int tc =0; tc<testCaseCnt; tc++) {
//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ입력시작ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
int manCnt = Integer.parseInt(br.readLine());
List<List<Integer>> list = new ArrayList<>();
int result = 0;
for (int i=0; i<manCnt; i++) {
st = new StringTokenizer(br.readLine());
List<Integer> tmp = new ArrayList<>();
tmp.add(Integer.parseInt(st.nextToken()));
tmp.add(Integer.parseInt(st.nextToken()));
list.add(tmp);
}
//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ입력 끝ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
Collections.sort(list, Comparator.comparing(arr -> arr.get(0)));
int maxInterviewRank = list.get(0).get(1);
for (int i=0; i<list.size(); i++) {
List<Integer> value = list.get(i);
if (value.get(1) == 1) {
result ++;
break;
}
if (value.get(1) <= maxInterviewRank) {
maxInterviewRank = value.get(1);
result ++;
}
}
System.out.println(result);
}
}
}
위 설명을 그대로 구현함
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[Java] 백준 1041 주사위 - 골드5 (0) | 2023.07.13 |
---|---|
[Java] 백준 9009 피보나치 - 실버1 (0) | 2023.07.13 |
[Java] 백준 1931 회의실 배정 - 실버1 (0) | 2023.07.13 |
[Java] 백준 16953 A -> B - 실버2 (그리디, bfs) (0) | 2023.07.12 |
[Java] 백준 13305 주유소 - 실버4 (0) | 2023.07.12 |