본문 바로가기
코딩/백준-자바

[자바] 백준 1205번: 등수 구하기

by 철없는민물장어 2023. 1. 13.
728x90
반응형

https://www.acmicpc.net/problem/1205

 

1205번: 등수 구하기

첫째 줄에 N, 태수의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보

www.acmicpc.net

모든 점수 + 태수의 점수를 배열에 넣고,

점수 기준 내림차순으로 정렬한다.

 

이후에 등수를 계산한다.

다음 점수가 현재 점수와 같다면 같은 등수를 부여하고 카운트를 증가시킨다.

다음 점수가 현재 점수와 다르다면(작다면), 현재 등수+카운트만큼 등수를 부여한다. 카운트는 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
반응형

댓글