728x90
https://www.acmicpc.net/problem/10814
10814번: 나이순 정렬
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을
www.acmicpc.net
풀이)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main_BJ_10814_나이순정렬 {
public static class person{
int age;
String name;
int order;
public person(int age, String name, int order){
this.age = age;
this.name = name;
this.order = order;
}
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PriorityQueue<person> pq = new PriorityQueue<>(new Comparator<person>() {
@Override
public int compare(person o1, person o2) {
if(o1.age == o2.age)
return o1.order - o2.order;
else
return o1.age - o2.age;
}
});
int n = Integer.parseInt(br.readLine());
for(int i=0; i<n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int num = Integer.parseInt(st.nextToken());
String name = st.nextToken();
pq.offer(new person(num, name, i));
}
for(int i=0; i<n; i++){
person person = pq.poll();
System.out.println(person.age + " " + person.name);
}
}
}
/*
age 순서대로 정렬할때 age가 같을때 먼저 넣는다고 앞선순서에 정렬되는 것이 아니다.
우선순위큐의 내부구조는 힙인데 따로 지정해주지 않으면 섞일 수도 있기때문에
age가 같다면 들어온 애들에 넘버를 부여해서 그 순서대로 정렬을 시켜줘야 한다.
*/
priority queue를 사용했는데, heap 정렬이라서 중간에 섞일 수 있다는 점만 유의한다면 쉽게 풀 수 있다.
728x90
'코테 > 백준' 카테고리의 다른 글
백준 10866 덱(JAVA) (0) | 2023.03.16 |
---|---|
백준 10845 큐(JAVA) (0) | 2023.03.16 |
백준 9012 괄호(JAVA) (1) | 2023.03.13 |
백준 2775 부녀회장이 될테야(JAVA) (0) | 2023.03.12 |
백준 9465 스티커(JAVA) (0) | 2023.03.11 |