BOJ#10814 나이순 정렬
* 문제
* 풀이
PriorityQueue를 이용해보았습니다.
나이순으로 정렬하고
나이가 같은 경우 입력 순서대로 출력되는 것을 보장하지 않으므로 order 변수를 하나 추가해서 해결하였습니다.
(다른 풀이)
정렬할 필요 없이 ArrayList<String>의 배열을 선언하고 나이 idx에 맞게 이름을 추가해주면 됩니다.
* 나의 코드
import java.io.*;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
/**
* BOJ#10814 나이순 정렬
* https://www.acmicpc.net/problem/10814
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
PriorityQueue<Member> pq = new PriorityQueue<>();
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
pq.add(new Member(i, Integer.parseInt(st.nextToken()), st.nextToken()));
}
bw.write(pq.poll().toString());
while (!pq.isEmpty()) {
bw.newLine();
bw.write(pq.poll().toString());
}
bw.flush();
bw.close();
br.close();
}
}
class Member implements Comparable<Member> {
int order;
int age;
String name;
Member(int order, int age, String name) {
this.order = order;
this.age = age;
this.name = name;
}
@Override
public int compareTo(Member o) {
return this.age < o.age ? -1 : this.age == o.age ? (this.order < o.order ? -1 : 1) : 1;
}
@Override
public String toString() {
return age + " " + name;
}
}
'Algorithm > 정렬' 카테고리의 다른 글
BOJ#3665 최종 순위 (2) | 2017.05.30 |
---|---|
BOJ#11650 좌표 정렬하기 (0) | 2017.03.22 |
BOJ#2252 줄 세우기 (0) | 2017.02.13 |
BOJ#13415 정렬 게임 (0) | 2016.12.02 |
BOJ#1005_ACM Craft (0) | 2016.11.04 |