[BOJ] 10825번 국영수 / 기초 정렬 알고리즘

Urther·2021년 9월 6일
0

알고리즘

목록 보기
1/41
post-thumbnail

Problem | 백준 10825번 국영수


도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다. 이때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오.

  • 국어 점수가 감소하는 순서로
  • 국어 점수가 같으면 영어 점수가 증가하는 순서로
  • 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
  • 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)

- N개의의 원소 정렬의 시간 복잡도 : O(nlogn)

- Arrays.sort

static class Elem implements Comparable<Elem>{
	int number;
    	public int compareTo(Elem other){
        	return /*오름차순 혹은 내림차순*/
        }
}

return 음수 : 내림차순
return 양수 : 오름차순
return 0 : 동일


- 전체 코드

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

public class Main {

    static class T implements Comparable<T> {
        public int Korean, English, Math;
        public String name;

        public int compareTo(T other) {
            //국어는 내림차순으로
            if (other.Korean != Korean)
                return other.Korean - Korean;
            //영어는 오름 차순으로
            if (other.English != English)
                return English - other.English;
            //수학은 내림차순으로
            if (other.Math != Math)
                return other.Math - Math;

            return name.compareTo(other.name);

        }
    }
        static int N;
        static T[] a;
        //입력받는 메소드
        public static void input(){
            Scanner sc=new Scanner(System.in);
            N=sc.nextInt();
            a=new T[N];
            for (int i=0;i<N;i++){
                a[i]=new T();
                a[i].name=sc.next();
                a[i].Korean=sc.nextInt();
                a[i].English=sc.nextInt();
                a[i].Math=sc.nextInt();
            }

        }
        public static void pro(){
            StringBuilder sb=new StringBuilder();
            Arrays.sort(a);
            for(int i=0;i<N;i++){
                sb.append(a[i].name).append('\n');
            }
            System.out.println(sb.toString());
        }

        public static void main(String args[]){
            input();
            pro();
        }
}
profile
이전해요 ☘️ https://mei-zy.tistory.com

0개의 댓글