nonneng.ee
Daeun-rithm
nonneng.ee
전체 방문자
오늘
어제
  • 분류 전체보기 (51)
    • Back-end (17)
      • Server (3)
      • Database (3)
      • Spring (9)
      • Node.js (1)
    • Book (1)
      • 이펙티브 자바 (0)
      • 대규모 시스템 설계 (1)
    • Algorithm (1)
      • Greedy, Implementation (6)
      • Dynamic Programming (5)
      • Data Structure (3)
      • Sorting (2)
      • Concept (1)
    • TIL (11)
    • Software (3)
      • Design Pattern (3)
    • Computer Science (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • API
  • Postman
  • 수동설치
  • 자바
  • 가상머신
  • 우분투
  • 서버
  • 브루트포스
  • node js
  • 에러
  • 컴파일설치
  • APM
  • 아이템8
  • DP
  • 아이템 23
  • jwt
  • 소스설치
  • 아이템 25
  • 이펙티브 자바
  • Java
  • Spring
  • 아이템6
  • JPA
  • 백준
  • 구동원리
  • 구현
  • 파이썬
  • MySQL
  • Restful API
  • 아이템9

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
nonneng.ee

Daeun-rithm

Algorithm/Sorting

[Java] 백준 #10825 국영수

2022. 7. 11. 18:13

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

 

10825번: 국영수

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1

www.acmicpc.net

  • 학생 N명의 국, 영, 수 점수
  • 학생 성적 정렬하기
    • 국어 점수 감소하는 순서
    • 국어 점수 같으면 → 영어 점수 증가
    • 국어, 영어 같으면 → 수학 점수 감소
    • 모두 같으면 이름 사전순 증가 (모든 대문자는 소문자 앞에)
    • 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.

💡 알고리즘

정렬

💡 접근

객체를 정렬하는 기준을 만들기 위해 자바에서 제공하는 Comparator를 사용해야 한다.

: Comparator 안에 조건문을 걸어주고 리턴시키면 위와같이 이중, 삼중으로도 정렬이 가능하다.

Arrays.sort(arr, new Comparator<String[]>() {

  • arr[1].compareTo(arr[2]) : (호출한객체 > 파라미터 객체) 일 때 양수 리턴
  • Integer.compare(arr[1], arr[2]) : 오름차순 정렬 (자리 바꾸면 내림차순)

💡 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class BOJ_10825 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        String[][] arr = new String[N][4];
        for(int i = 0; i < N; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            arr[i][0] = st.nextToken();
            arr[i][1] = st.nextToken();
            arr[i][2] = st.nextToken();
            arr[i][3] = st.nextToken();
        }

        Arrays.sort(arr, new Comparator<String[]>() {
            @Override
            public int compare(String[] s1, String[] s2) {
                if (Integer.parseInt(s1[1]) == Integer.parseInt(s2[1])) {
                    if (Integer.parseInt(s1[2]) == Integer.parseInt(s2[2])) {
                        if (Integer.parseInt(s1[3]) == Integer.parseInt(s2[3])) {

                            // 국영수 모두 같을 때 -> 사전순
                            return s1[0].compareTo(s2[0]);
                        }

                        // 국영 같을 때 -> 수학 내림차순
                        return Integer.compare(Integer.parseInt(s2[3]), Integer.parseInt(s1[3]));

                    }
                    // 국어 같을 때 -> 영어 오름차순
                    return Integer.compare(Integer.parseInt(s1[2]), Integer.parseInt(s2[2]));
                }
                // 국어 내림차순
                return Integer.compare(Integer.parseInt(s2[1]), Integer.parseInt(s1[1]));
            }
        });
        for(int i = 0; i < N; i++){
            System.out.println(arr[i][0]);
        }
    }
}

💡 정리

정렬 조건이 여러개 → Comparator 사용!!

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

[Python] 백준 #10989 수 정렬하기 3  (0) 2022.03.03
    'Algorithm/Sorting' 카테고리의 다른 글
    • [Python] 백준 #10989 수 정렬하기 3
    nonneng.ee
    nonneng.ee

    티스토리툴바