Unicorns

All the things

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 2535] - 아시아 정보올림피아드 java
    Algorithm/BOJ 2021. 10. 18. 20:58

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

     

    2535번: 아시아 정보올림피아드

    첫 번째 줄에는 대회참가 학생 수를 나타내는 N이 주어진다. 단, 3 ≤ N ≤ 100이다. 두 번째 줄부터 N개의 줄에는 각 줄마다 한 학생의 소속 국가 번호, 학생 번호, 그리고 성적이 하나의 빈칸을 사

    www.acmicpc.net

     

    문제

    최근 아시아 지역의 학생들만 참여하는 정보 올림피아드 대회가 만들어졌다. 이 대회는 온라인으로 치러지기 때문에 각 나라에서 이 대회에 참여하는 학생 수의 제한은 없다. 

    참여한 학생들의 성적순서대로 세 명에게만 금, 은, 동메달을 수여한다. 단, 동점자는 없다고 가정한다. 그리고 나라별 메달 수는 최대 두 개다.

    예를 들어, 대회 결과가 다음의 표와 같이 주어졌다고 하자.

     

     

    이 경우, 금메달 수상자는 1번 국가의 1번 학생이고, 은메달 수상자는 1번 국가의 2번 학생이며, 동메달 수상자는 3번 국가의 4번 학생이다. (1번 국가의 3번 학생의 성적이 동메달 수여자보다 높지만, 나라 별 메달 수가 두 개 이하 이므로 1번 국가 3번 학생은 동메달을 받을 수 없다.)

    대회 결과가 입력으로 주어질 때, 메달 수상자를 결정하여 출력하는 프로그램을 작성하시오.

     

    입력

    첫 번째 줄에는 대회참가 학생 수를 나타내는 N이 주어진다. 단, 3 ≤ N ≤ 100이다. 두 번째 줄부터 N개의 줄에는 각 줄마다 한 학생의 소속 국가 번호, 학생 번호, 그리고 성적이 하나의 빈칸을 사이에 두고 주어진다. 단, 국가 번호는 1부터 순서대로 하나의 정수로 주어지며, 각 학생번호는 각 나라별로 1부터 순서대로 하나의 정수로 주어진다, 점수는 0 이상 1000 이하의 정수이고, 동점자는 없다고 가정한다. 입력으로 제공되는 국가는 적어도 두 나라 이상이다.

    출력

    메달을 받는 학생들을 금, 은, 동메달 순서대로 한 줄에 한 명씩 출력한다. 즉, 첫 번째 줄에는 금메달 수상자를, 두 번째 줄에는 은메달 수상자를, 세 번째 줄에는 동메달 수상자를 출력한다. 하나의 줄에는 소속국가 번호와 학생 번호를 하나의 빈칸을 사이에 두고 출력한다. 

     

     

     

    코드

     

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.StringTokenizer;
    
    class Result {
        int country_num; // 참가국 번호
        int student_num; // 학생 번호
        int score; // 점수
    
        public Result(int country_num, int student_num, int score) { // 입력 값 생성자로 받음
            this.country_num = country_num;
            this.student_num = student_num;
            this.score = score;
        }
    }
    
    public class 아시아정올_2535 {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // scanner  대신 사용
            int n = Integer.parseInt(br.readLine()); // 대회 참가 학생 수
            Result[] results = new Result[n]; // 참가 학생의 참가국 번호, 학생번호, 점수가 담긴 Result 객체 배열
            int[] countryNumArray = new int[101]; // 참가 학생 수는 최대 100명이고 모두 다른 나라일 경우
            // 최대 국가도 100개
            for (int i = 0; i < n; i++) { // 참가 학생 수 
                // 입력 값 공백을 기준으로 나누기 ex) 1 1 230 
                StringTokenizer st = new StringTokenizer(br.readLine());
                int country_num = Integer.parseInt(st.nextToken()); // 공백 기준으로 첫번째 입력값 1
                int student_num = Integer.parseInt(st.nextToken()); // 그 다음 1
                int score = Integer.parseInt(st.nextToken()); // 그  다음 230
                results[i] = new Result(country_num, student_num, score); // 각각 객체 배열 인덱스 값으로 초기화
            }
    
            Arrays.sort(results, new Comparator<Result>() { // 점수 높은 순서대로 정렬
                @Override
                public int compare(Result o1, Result o2) {
                    return o2.score - o1.score;
                }
            });
            int count = 0; // 배열 인덱스 역할
            int print = 0; // 동메달까지 출력하기 위한 초기화 숫자
            while (print <3) { // 점수 높은 순서대로 정렬 후 동메달 까지만 출력한다. 
                int country_num = results[count].country_num; //정렬 후 배열 0번째 인덱스 부터 참가국 번호 추출
                countryNumArray[country_num]++; // 참가국 번호를 인덱스로 갖는 배열
                //해당 참가국 인덱스 값이 증가하는데 나라 별 메달 수는 최대 2개
                if (countryNumArray[country_num] <3) { // 참가국 번호, 학생 번호 출력
                    System.out.println(results[count].country_num+" "+results[count].student_num);
                    print++; // 동메달 까지 출력하기 위한 기준
                }
                count++; // 동메달 까지 뽑기 위해 Result 객체 인데스 번호 증가
            }
        }
    }

    'Algorithm > BOJ' 카테고리의 다른 글

    [백준 1296] 팀이름 정하기 c++  (0) 2021.12.05
    [백준 14248 ] 점프 점프 java  (0) 2021.10.22
    [백준-10866] 덱 - java  (0) 2021.06.30
    [백준 - 10809] - 알파벳 찾기 (java)  (0) 2021.05.17
    [백준 9012번] - 괄호 java  (0) 2021.05.09

    댓글

Designed by Tistory.