[백준] 15905. 스텔라(STELLA)가 치킨을 선물했어요

1 분 소요

문제 링크

[백준] 15905. 스텔라(STELLA)가 치킨을 선물했어요


풀이 과정

정렬 문제입니다.


정렬 기준은 문제에서 주어진 조건으로 정할 수 있습니다. 다음은 문제에서 주어진 조건입니다.

  • 해결한 문제의 개수가 더 많은 참가자가 높은 순위를 가진다.
  • 해결한 문제 수가 같을 때는 패널티 총합이 더 적은 참가자가 높은 순위를 가진다.


@Override
public int compareTo(Pair p) {
    return this.solved == p.solved ? this.penalty - p.penalty : p.solved - this.solved;
}

위 규칙을 토대로 정렬 기준을 설정했습니다.

  • 두 참가자가 푼 문제 수가 같을 땐, 패널티 총합을 오름차순으로 정렬.
  • 두 참가자가 푼 문제 수가 다를 땐, 푼 문제 수를 내림차순으로 정렬.


Collections.sort(list);
Pair fifth = list.get(4);

입력을 모두 리스트에 담은 뒤 위에서 설정한 정렬 기준에 맞게 정렬을 합니다.

또한, 문제의 참가자 수는 최소 5명이므로, 5등은 무조건 정해져 있게 됩니다. 따라서 5등 정보를 미리 저장해 둡니다.


for (int i = 5; i < list.size(); i++) {
    Pair now = list.get(i);

    if (fifth.solved == now.solved)
        answer++;
    else break;
}

이제 6등부터 5등과 해결한 문제 수가 같은 참가자의 수를 셉니다.


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int N = Integer.parseInt(br.readLine());
        ArrayList<Pair> list = new ArrayList<>();

        while (N-- > 0) {
            st = new StringTokenizer(br.readLine(), " ");
            int solved = Integer.parseInt(st.nextToken());
            int penalty = Integer.parseInt(st.nextToken());

            list.add(new Pair(solved, penalty));
        }

        Collections.sort(list);
        int answer = 0;
        Pair fifth = list.get(4);

        for (int i = 5; i < list.size(); i++) {
            Pair now = list.get(i);

            if (fifth.solved == now.solved)
                answer++;
            else break;
        }

        System.out.println(answer);
    }

    static class Pair implements Comparable<Pair> {
        int solved, penalty;

        public Pair(int solved, int penalty) {
            this.solved = solved;
            this.penalty = penalty;
        }

        @Override
        public int compareTo(Pair p) {
            return this.solved == p.solved ? this.penalty - p.penalty : p.solved - this.solved;
        }
    }
}

카테고리:

업데이트:

댓글남기기