문제
항상 최고를 지향하는 일류기업 ㈜진영에서 신입사원을 채용합니다.
인재선발시험은 1차 서류심사와 2차 면접으로 이루어집니다.
최고만을 추구하는 회사의 이념에 따라 최고의 인재만을 채용하고자 합니다.
이에 (주)진영은 서류심사와 면접 중 어느 하나라도 다른 지원자보다 뒤처지지 않는 지원자에 한해 선발하는 원칙을 도입했다.
즉, 지원자 a의 성적과 b 지원자의 성적을 기준으로 서류심사 및 면접 결과를 선발하지 않습니다.
이러한 조건을 만족시키면서 (주)진영에서 채용할 최대 신입사원 수를 구하는 프로그램을 작성하시오. 이번 신입사원 채용에서 선발할 수 있습니다.
2
5
3 2
1 4
4 1
2 3
5 5
7
3 6
7 3
4 2
1 4
5 7
2 5
6 1
즉, 지원자 A의 성적이 다른 지원자의 B보다 서류심사와 면접에서 모두 나쁠 경우 A는 선발되지 않습니다.
이 말이 핵심입니다.
그러나 코드는 정렬되지 않고 출력됩니다.
즉, 먼저 페이지를 오름차순으로 정렬하는 것입니다.
왜 오름차순인가요? -> 오름차순 정렬은 1부터 N까지 정렬됩니다.
1순위는 다른 모든 것보다 점수가 높기 때문에 비교 자체가 필요 없이 통과된다.
2위를 보니 2위에서 1위로 한쪽이 졌다.
그렇다면 상대방은 남고, 상대방도 지면 그대로 탈락된다.
첫 번째 예제를 통해 수행하면
이러한 이유로 일방적인 정렬이 필요합니다.
면접 후 협의 가능
면접으로 분류할 때
4 1
3 2
2 3
1 4
5 5
이렇게 하면 결과는 동일합니다.
근데 여기서 자기보다 면접 순위가 높은 애들 중에 면접 점수가 제일 높아야 하는데..? 이 부분은 가장 큰 값을 임시 변수에 저장하고 더 큰 값이 발견되면 변경합니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
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 {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
for(int i = 0; i < N;i++){
int M = Integer.parseInt(br.readLine());
ArrayList<int()> list = new ArrayList<>();
int count = 1;
for(int j=0;j<M;j++){
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
list.add(new int(){a,b});
}
list.sort(new Comparator<int()>() {
@Override
public int compare(int() o1, int() o2) {
return o1(0) - o2(0);
}
});
int temp = list.get(0)(1); //첫번째 면접 점수
for (int j = 1; j <= list.size()-1; j++) {
if(temp > list.get(j)(1)){ //만약 자신보다 전 등수 면접 점수가 크다
//그럼 자신이 등수가 높다는 뜻이므로 temp값변경
temp = list.get(j)(1);
count++;
}
}
System.out.println(count);
}
}
}
//https://sanghyu.36