Algorithm/정렬

BOJ#10814 나이순 정렬

밤이2209 2017. 5. 1. 00:23

BOJ#10814 나이순 정렬


* 문제


* 풀이

PriorityQueue를 이용해보았습니다.
나이순으로 정렬하고
나이가 같은 경우 입력 순서대로 출력되는 것을 보장하지 않으므로 order 변수를 하나 추가해서 해결하였습니다.

(다른 풀이)
정렬할 필요 없이 ArrayList<String>의 배열을 선언하고 나이 idx에 맞게 이름을 추가해주면 됩니다.


* 나의 코드

https://github.com/stack07142/BOJ/blob/062e7ce8f6877dc0ca458b108ed6b2cc8c2b4fbe/BOJ%2310814_SortByAge/src/Main.java



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