[Softeer] Java - level3 문제풀이(성적평가)

2023. 2. 17. 19:07·개발자 세릴리/코딩테스트
728x90
반응형

softeer 성적평가(Java)

[문제]

현주는 N명의 인원이 참여하는 프로그래밍 스터디 그룹을 이끌고 있다.


현주는 스터디를 위해 대회를 세 개 개최하였고, 모든 구성원이 각 대회에 참여하였다. 참가자는 각 대회에서 0 이상 1,000 이하의 정수인 점수를 얻는다. 한 대회에서 둘 이상의 참가자가 동점이 나오는 경우도 있을 수 있다.


현주는 각 대회별 등수 및 최종 등수를 매기고 싶다. 등수는 가장 점수가 높은 사람부터 1등, 2등, ···, N등의 순서대로 붙는다. 만일 동점이 있을 경우 가능한 높은 (등수의 수가 작은) 등수를 부여한다. 즉, 점수가 내림차순으로 10,7,6,6,4의 순서일 경우, 6점을 받은 두 사람은 공동 3등이 되고, 그 다음 순서인 4점을 받은 사람은 5등이 된다. 이 규칙을 다르게 표현하면 다음과 같다: 각 사람마다 “나보다 점수가 큰 사람”의 수를 세어 1을 더한 것이 자신의 등수가 된다. 대회별 등수는 각 대회에서 얻은 점수를 기준으로 하며 최종 등수는 세 대회의 점수의 합을 기준으로 한다.


각 참가자의 대회별 등수 및 최종 등수를 출력하는 프로그램을 작성하시오.

 

[제약조건]

3 ≤ N ≤ 100,000

 
[입력형식]

첫째 줄에 참가자의 수를 나타내는 정수 N이 주어진다.
이어 세 개의 줄에 각 대회의 결과를 나타내는 N개의 정수가 주어진다. 이중 i번째 정수는 그 대회에서 i번째 사람이 얻은 점수를 의미한다.

 
[출력형식]

첫 세 개의 줄에는 각 참가자의 대회별 등수를 출력한다. 즉 이중 c번째 줄의 i번째 정수는 c번째 대회에서의 i번째 사람의 등수를 의미한다.
이어 새로운 줄에 같은 형식으로 각 참가자의 최종 등수를 출력한다.

 

[풀이]

import java.util.*;
import java.io.*;


public class Main
{
    static int N;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        int[] totalScore = new int[N];
        for(int i=0; i<3; i++) {
            String[] game = br.readLine().split(" ");
            PriorityQueue<Gamer> priorityQueue = new PriorityQueue<>();
            for(int j=0; j<N; j++) {
                int score = Integer.parseInt(game[j]);
                totalScore[j] += score;
                priorityQueue.offer(new Gamer(j, score));
            }
            int[] grades = getGrade(priorityQueue);
            for (int grade : grades) {
                System.out.print(grade + " ");
            }
            System.out.println();
        }
        PriorityQueue<Gamer> finalQueue = new PriorityQueue<>();
        for(int i=0; i<N; i++) {
            finalQueue.offer(new Gamer(i, totalScore[i]));
        }
        int[] finalGrade = getGrade(finalQueue);
        for (int grade : finalGrade) {
            System.out.print(grade + " ");
        }
        System.out.println();
    }
    public static int[] getGrade(PriorityQueue<Gamer> pq) {

        Gamer nowGamer = pq.poll();
        int[] grades = new int[N];
        int nowGrade = 1;

        int prevScore = nowGamer.score;
        grades[nowGamer.idx] = nowGrade;
        int gradeIdx = 1;
        while(!pq.isEmpty()) {
            nowGamer = pq.poll();
            if(prevScore == nowGamer.score) {
                grades[nowGamer.idx] = nowGrade;
                gradeIdx++;
            } else if(prevScore > nowGamer.score) {
                nowGrade = gradeIdx+1;
                grades[nowGamer.idx] = nowGrade;
                gradeIdx++;
            }
            prevScore = nowGamer.score;
        }
        return grades;
    }
    static class Gamer implements Comparable<Gamer>{
        int idx;
        int score;
        public Gamer(int idx, int score) {
            this.idx = idx;
            this.score = score;
        }
        @Override
        public int compareTo(Gamer o) {
            return o.score - this.score;
        }
    }
}
728x90
반응형

'개발자 세릴리 > 코딩테스트' 카테고리의 다른 글

[BOJ] Java - 1978번 문제풀이(소수찾기)  (0) 2023.03.02
[BOJ] Java - 1966번 문제풀이(프린터 큐)  (0) 2023.02.27
[Softeer] Java - level3 문제풀이(업무처리)  (0) 2023.02.16
[Softeer] Java - level2 문제풀이(바이러스)  (2) 2023.02.12
[Softeer] Java - level2 문제풀이(GBC)  (0) 2023.02.11
'개발자 세릴리/코딩테스트' 카테고리의 다른 글
  • [BOJ] Java - 1978번 문제풀이(소수찾기)
  • [BOJ] Java - 1966번 문제풀이(프린터 큐)
  • [Softeer] Java - level3 문제풀이(업무처리)
  • [Softeer] Java - level2 문제풀이(바이러스)
세릴리
세릴리
  • 세릴리
    세리의 데이터베이스 세상
    세릴리
  • 전체
    오늘
    어제
    • 분류 전체보기 (87)
      • 개발자 세릴리 (65)
        • 비전공자 한 입 지식 (12)
        • 코딩테스트 (24)
        • 스펙업 (15)
        • JAVA (5)
        • 일상 (9)
      • 파이어족 세릴리 (21)
        • 블로그 운영 (3)
        • 각종 양식 공유 (1)
        • 돈되는 정보 공유 (17)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    현대자동차 코딩테스트
    현대오토에버 코테
    adsp 자료
    softeer java 풀이
    java 공부
    현대모비스 코딩테스트
    adsp 수험표
    명품자바프로그래밍 해설
    개발자 공부
    adsp 독학
    JAVA 책 추천
    비전공 개발자
    비전공자 개발
    adsp 공부법
    명품자바프로그래밍 정답
    adsp 벼락치기
    현대 코딩테스트
    Java 문제
    명품자바프로그래밍
    개발자되는법
    현대 코테
    개발자 이직
    오늘 이슈
    이슈
    Softeer 문제 풀이
    비전공자 개발자
    백준
    현대오토에버 코딩테스트
    JAVA 개발공부
    프로그래밍 공부
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
세릴리
[Softeer] Java - level3 문제풀이(성적평가)
상단으로

티스토리툴바