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

[자바] 8979번: 올림픽

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

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

 

8979번: 올림픽

입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각

www.acmicpc.net

 


int[][] arr= new int[n][5] 

배열을 만들었다.

arr[] => {국가번호, 금메달, 은메달, 동메달, 등수} 이다.

 

arr에 정보를 입력받은 후,

금메달>은메달>동메달 순으로 정렬한다.

(Arrays.sort , comparator 이용)

 

이후, 등수를 책정하는데

점수가 같은 국가는 공동순위를 받아야 하므로

 

이전 국가와 비교해서 금은동 개수가 같으면 이전국가와 같은 등수를 받고, 카운트를 증가시킨다

이전 국가와 비교해서 금은동 개수가 다르면 이전국가의 등수 + 카운트 한 값을 등수로 받고, 카운트를 1로 초기화 한다.

 

이후 배열에서 k국가의 등수를 출력한다.

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 P8979 {

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());
		int[][] arr = new int[n][5];

		for (int i = 0; i < n; i++) {
			st = new StringTokenizer(br.readLine());
			arr[i][0] = Integer.parseInt(st.nextToken());
			arr[i][1] = Integer.parseInt(st.nextToken());
			arr[i][2] = Integer.parseInt(st.nextToken());
			arr[i][3] = Integer.parseInt(st.nextToken());
		}

		Arrays.sort(arr, new Comparator<int[]>() {

			@Override
			public int compare(int[] o2, int[] o1) {
				if (o1[1] == o2[1]) {
					if (o1[2] == o2[2]) {
						return o1[3] - o2[3];
					} else {
						return o1[2] - o2[2];
					}
				}
				return o1[1] - o2[1];
			}
		});
		int count = 1;
		arr[0][4] = 1;
		for (int i = 1; i < n; i++) {
			if (arr[i - 1][1] == arr[i][1] && arr[i - 1][2] == arr[i][2] && arr[i - 1][3] == arr[i][3]) {
				arr[i][4] = arr[i - 1][4];
				count++;
			} else {
				arr[i][4] = arr[i - 1][4] + count;
				count = 1;
			}

		}

		for (int i = 0; i < n; i++) {
			if(arr[i][0]==k)
				System.out.println(arr[i][4]);
		}
	}

}
728x90
반응형

댓글