suheang

[백준] | JAVA, 자바 | 10814번 - 나이순 정렬 본문

알고리즘

[백준] | JAVA, 자바 | 10814번 - 나이순 정렬

suheang 2024. 8. 19. 22:45

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


문제 요약 :

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성


문제 풀이 :

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        ArrayList<Member> list = new ArrayList<>();

        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int age = Integer.parseInt(st.nextToken());
            String name = st.nextToken();;

            Member member = new Member(i, age, name);
            list.add(member);
        }

        list.sort((m1, m2) -> {
            if (m1.age != m2.age) {
                return Integer.compare(m1.age, m2.age);
            }
            return Integer.compare(m1.join, m2.join);
        });

        StringBuilder sb = new StringBuilder();
        for (Member member : list) {
            sb.append(member.age).append(" ").append(member.name).append("\n");
        }
        System.out.print(sb.toString());
    }

    static class Member {
        public int join;
        public int age;
        public String name;
        Member(int join, int age, String name) {
            this.join = join;
            this.age = age;
            this.name = name;
        }
    }
}

 

1. Member 클래스를 정의하고 join, age, name 필드를 선언, 생성자는 세 개의 필드를 매개변수로 받아 객체를 초기화
2. 회원 수 n 입력받기
3. Member 타입의 ArrayList 생성
4. 입력받은 n 만큼 반복해서 나이와 이름 입력받기

5. Member 객체를 생성하고 i의 순서와 입력받은 나이와 이름을 설정, 생성된 Member 객체를 리스트에 추가

6. list.sort 메서드를 사용해 리스트를 정렬

6 - 1. 람다 표현식을 사용하여 정렬 기준을 정의

6 - 2. 두 회원의 나이를 비교하여 나이가 적은 회원이 먼저 옴

6 - 3. 나이가 같을 경우 가입 순서에 따라 정렬, 가입 순서가 빠른 회원이 먼저 옴

7. StringBuilder를 사용하여 정렬된 리스트 내용을 문자열로 조합

8. 조합된 문자열을 출력