반응형
문제
풀이
package greedy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
//신입 사원
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());//테스트 케이스의 개수
int n; //지원자 수
StringBuilder sb = new StringBuilder();
for(int i = 0; i < t; i++) {
n = Integer.parseInt(br.readLine());
int[] arr = new int[n];//서류심사, 면접 성적
int answer = 1;//신입사원의 최대 인원수 1일 때는 무조건 가능하므로.
StringTokenizer st;
for(int j = 0; j < n; j++) {
st = new StringTokenizer(br.readLine()," ");
arr[Integer.parseInt(st.nextToken()) - 1] = Integer.parseInt(st.nextToken());
}
if(n == 1) {
sb.append(answer).append("\n");
return;
}
int prev = arr[0];
for(int j = 1; j < n; j++) {
if(prev > arr[j]) {
prev = arr[j];
answer++;
}
}
sb.append(answer).append("\n");
}
System.out.println(sb);
br.close();
}
}
팁
1. 서류심사 성적, 면접 성적을 서류심사의 오름차순으로 정렬하기
arr[서류성적 - 1] = 면접 성적을 활용하여 서류심사 성적의 1등부터 n등의 면접성적을 배열값에 넣어준다.
for(int j = 0; j < n; j++) {
st = new StringTokenizer(br.readLine()," ");
arr[Integer.parseInt(st.nextToken()) - 1] = Integer.parseInt(st.nextToken());
}
2. n이 1인 경우
n이 1이라면 지원자의 수가 1명이라는 것이므로, 비교할 필요없이 1을 반납한다.
if(n == 1) {
sb.append(answer).append("\n");
return;
}
3. 최대 지원자 수 구하기
- 서류 점수가 1등인 경우는 무조건 선발 가능하므로, answer를 1로 선언한다.
int answer = 1;//신입사원의 최대 인원수 1일 때는 무조건 가능하므로.
- 서류 점수가 2등인 값부터 비교하기 위해 j는 1부터 n보다 작을 때까지, 반복문을 반복한다.
j가 1일 때(서류점수가 2등일 때) -> arr[0] > arr[1]이면 선발 가능하다.
즉, 이전 인덱스의 면접 등수보다 높으면 선발이 가능하다.
int prev = arr[0];
for(int j = 1; j < n; j++) {
if(prev > arr[j]) {
prev = arr[j];
answer++;
}
}
출처
반응형
'알고리즘 > Java' 카테고리의 다른 글
[백준] 10162.전자레인지(Java8) (0) | 2021.10.08 |
---|---|
[백준] 1439.뒤집기 / 이코테.문자열 뒤집기(Java8) (0) | 2021.10.07 |
[백준] 2217.로프(Java8) (0) | 2021.10.04 |
[백준] 11047.동전 0(Java8) (0) | 2021.10.04 |
[백준] 11399.ATM(Java8) (0) | 2021.10.04 |