문제 링크 : 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));
'◖코딩 테스트◗▬▬▬▬▬▬▬▬▬ > 백준' 카테고리의 다른 글
[백준] 2743 단어 길이 재기(설명/코드/정답) (0) | 2024.06.08 |
---|---|
[백준] 27866 문자와 문자열 (설명/코드/정답) (0) | 2024.06.04 |
[백준](2024)단어 정렬(설명/코드/정답) (0) | 2024.02.22 |
[백준](2024) 행운의 바퀴 (설명/코드/정답) (0) | 2024.02.22 |
[백준](2024)ACM 호텔(설명/코드/정답) (0) | 2024.02.22 |