Algorithm/Greedy

BOJ#1946 신입 사원

밤이2209 2017. 3. 22. 03:10

BOJ#1946 신입 사원


* 문제

* 풀이

서류 성적으로 오름차순 정렬 후 면접 성적을 순차적으로 검사한다.


정렬 이후 첫번째 줄은 무조건 합격이므로

2번째 줄부터 N번째 줄까지 순차적으로 진행한다.


서류 성적으로 한번 정렬 되었으므로 이미 누군가에게는 한번 졌다는 뜻이다.

따라서 면접 성적에서 누구에게라도 한번만 더 지게 되면 탈락이다.


따라서, 

2번째 줄부터 N번째 줄까지 순차적으로 진행하면서

면접 성적의 최고 순위를 계속 갱신 + 최고 순위와 현재 라인을 검사




* 나의 코드


https://github.com/stack07142/BOJ/tree/master/BOJ%231946_Freshman/src



import java.io.IOException;
import java.util.Scanner;

/**
* BOJ#1946 신입사원
* https://www.acmicpc.net/problem/1946
*/

public class Main {

public static void main(String[] args) throws IOException {

int T; // 테스트 케이스 개수
int N; // 지원자의 숫자 <= 100,000
Grade[] grade; // 서류, 면접 등수

Scanner sc = new Scanner(System.in);

T = sc.nextInt();

for (int t = 0; t < T; t++) {

N = sc.nextInt();

grade = new Grade[N + 1];

for (int i = 0; i < N; i++) {

int a = sc.nextInt();
int b = sc.nextInt();

grade[a] = new Grade(a, b);
}

int ans = 1;
int best = grade[1].b;
for (int i = 2; i <= N; i++) {

if (grade[i].b < best) {

best = best > grade[i].b ? grade[i].b : best;
ans++;
}
}

System.out.println(ans);
}
}
}

class Grade implements Comparable<Grade> {

int a; // 서류 등수
int b; // 면접 등수

Grade(int a, int b) {

this.a = a;
this.b = b;
}

@Override
public int compareTo(Grade o) {

return this.a < o.a ? -1 : 1;
}

@Override
public String toString() {

return "(" + a + "," + b + ")";
}
}


'Algorithm > Greedy' 카테고리의 다른 글

BOJ#1541 잃어버린 괄호  (0) 2017.04.30
BOJ#6195 Fence Repair  (0) 2017.02.02
BOJ#7676 Saruman's Army  (0) 2017.02.02
POJ#3617 Best Cow Line  (0) 2017.02.01
BOJ#1700 멀티탭 스케쥴링  (0) 2017.02.01