1 분 소요

사용 언어: Java

문제

올림픽

풀이

나의 풀이

자바

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer stk = new StringTokenizer(in.readLine());

        int N = Integer.parseInt(stk.nextToken()); // 전체 국가 수
        int K = Integer.parseInt(stk.nextToken()); // 알고싶은 국가

        ArrayList<int[]> info = new ArrayList<>();  
        for (int i=0; i<N; i++) {
            stk = new StringTokenizer(in.readLine());
            int[] tmp = new int[4];
            for (int j=0; j<4; j++) {
                tmp[j] = Integer.parseInt(stk.nextToken());
            }
            info.add(tmp);
        }

        // ✅ 정렬
        info.sort((a, b) -> { // a와 b는 모두 array 타입
            int gold_A = a[1];
            int gold_B = b[1];
            int silver_A = a[2];
            int silver_B = b[2];
            int bronze_A = a[3];
            int bronze_B = b[3];

            if (gold_A == gold_B) {
                if (silver_A == silver_B) {
                        return bronze_B - bronze_A; // 3. 동이 많은게 우승
                }   
                return silver_B - silver_A; // 2. 은이 많은게 우승
            }
            return gold_B - gold_A; // 1. 금이 많은게 우승
        });
        
        // ✅ 순회하면서 같으면 공동순위, 그 다음은 순위 밀리게
        int grade = 0; // 등수
        int cnt = 0; // 하나씩 카운트 (공동등수 다음 등수를 위해)
        String previous = ""; // 금은동 -> ex. 120 010 010 001
        for (int[] arr : info) {
            cnt++;
            String tmp = String.join("", Arrays.asList(Arrays.copyOfRange(arr, 1, 4))); // array(배열)을 리스트로 변환 (join은 리스트만 사용 가능하기 때문)
            if (tmp.equals(previous)) {
                // ✅ 같으면 공동순위라는 의미 (grade를 갱신하지 않는다)
            } else {
                grade = cnt; // grade 갱신
                previous = tmp; // previous 갱신
            }
            if (arr[0] == K) { // ✅ 알고싶은 국가라면
                out.write(grade + "\n"); // 등수 출력
                break;
            }
        }
        out.close();
        in.close();
    }
}
  • 테스트 케이스: 성공
  • 제출 결과: 성공


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기