728x90
반응형
https://www.acmicpc.net/problem/1205
모든 점수 + 태수의 점수를 배열에 넣고,
점수 기준 내림차순으로 정렬한다.
이후에 등수를 계산한다.
다음 점수가 현재 점수와 같다면 같은 등수를 부여하고 카운트를 증가시킨다.
다음 점수가 현재 점수와 다르다면(작다면), 현재 등수+카운트만큼 등수를 부여한다. 카운트는 1로 초기화한다.
추가로, 현재 점수가 태수의 점수와 같다면 인덱스를 기록해 둔다.
(그러면 반복이 끝난 이후에, 태수의 점수 위치를 알 수 있다)
태수의 점수 위치가 p보다 작다면 태수의 등수를 출력하고(배열의 인덱스는 0부터 시작하기 때문에 p와 태수의 위치가 같은경우는 안 된다),
p보다 같거나 크다면 -1을 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class P1205 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int record = Integer.parseInt(st.nextToken());
int p = Integer.parseInt(st.nextToken());
int[][] arr = new int[n + 1][2];
int result = 0;
if (n > 0) {
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
arr[i][0] = Integer.parseInt(st.nextToken());
}
} else {
if (p >= 1) {
System.out.println(1);
return;
} else {
System.out.println(-1);
return;
}
}
arr[n][0] = record;
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o2, int[] o1) {
return o1[0] - o2[0];
}
});
int index = 0;
int count = 1;
arr[0][1] = 1;
for (int i = 1; i < n + 1; i++) {
if (arr[i - 1][0] == arr[i][0]) {
count++;
arr[i][1] = arr[i - 1][1];
} else {
arr[i][1] = arr[i - 1][1] + count;
count = 1;
}
if (arr[i][0] == record) {
index = i;
}
}
if (index < p) {
System.out.println(arr[index][1]);
} else {
System.out.println(-1);
}
}
}
728x90
반응형
'코딩 > 백준-자바' 카테고리의 다른 글
[자바] 백준 1759번: 암호 만들기 (1) | 2023.01.15 |
---|---|
[자바] 백준 2529번: 부등호 (0) | 2023.01.14 |
[자바] 백준 1987번: 알파벳 (0) | 2023.01.13 |
[자바] 백준 10819번: 차이를 최대로 (0) | 2023.01.12 |
[자바] 백준 2309번: 일곱 난쟁이 (0) | 2023.01.11 |
댓글