Dev Hyeri

◖코딩 테스트◗▬▬▬▬▬▬▬▬▬/백준

[백준](2024) 나이순 정렬 (설명/코드/정답)

_hyeri 2024. 2. 23. 01:05

 

 

문제 링크 : https://www.acmicpc.net/problem/10814

 

 

난이도
알고리즘
실버5 정렬

 

 

1. 요구 사항 이해

시간, 메모리 제한 : 3초 / 256MB

 

가입한 순서대로 주어진 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 순으로 정렬하여 출력한다.

 

* 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수

* 이름 알파벳 대소문자 길이가 100보다 작거나 같은 문자열

 

 

 

2. 설계/검증 

입력

- N 회원 수 

- 나이

- 이름

 

설계 

- 나이가 같을 때 인덱스가 큰 게 먼저 정렬.

- 나이 이름 인덱스를 클래스로 다룬다.

 

출력 

-나이순

- 나이가 같으면 먼저 가입한 사람이

시간 복잡도  최악의 경우  공간 복잡도
O(N log N) 1,663,648  O(N * 100)

 

 

 

3. 정상 코드

import java.util.*;

public class Main {

    public static void main(String[] args) {

        // Scanner 객체 생성
        Scanner scanner = new Scanner(System.in);
        // 회원 수 입력
        int N = scanner.nextInt();
        // Member 클래스의 객체를 저장할 리스트 생성
        List<Member> members = new ArrayList<>();

        // 각 회원 정보 입력 및 리스트에 추가
        for (int i = 0; i < N; i++) {
            int age = scanner.nextInt();
            String name = scanner.next();
            int idx = i;
            members.add(new Member(age, name, idx));
        }

        // 회원을 나이로 오름차순 정렬하되, 나이가 같으면 입력 순서대로 정렬
        members.sort(Comparator.comparingInt((Member m) -> m.age).thenComparing(m -> m.idx));

        // 정렬된 회원 정보 출력
        for (Member m : members) {
            System.out.println(m.age + " " + m.name);
        }
    }


    // 내부 클래스 Member 선언
    private static class Member{

        int age; // 나이
        String name; //이름
        int idx; // 입력 순서를 기억하기 위한 인덱스

        // Member 클래스의 생성자
        public Member(int age, String name, int idx) {
            this.age = age;
            this.name = name;
            this.idx = idx;
        }
    }
}

 

 

 

 

 

 

추가 정리

 

comparingInt

Arrays.sort(members, Comparator.comparingInt((Member m) -> m.age).thenComparingInt(m -> m.idx));