백준 10814번: 나이순 정렬 [정렬] -Java :: 매운코딩
728x90
300x250

 

지난번 풀었떤 정렬에서 정렬조건이 추가된 문제..

이런 정렬조건 보면 SQL order by만 생각나는건 나뿐일까....

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

 

10814번: 나이순 정렬

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

www.acmicpc.net

Java정답 코드는 아래를 참고하세요

 

첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.

728x90
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//System.setIn(new FileInputStream("Test.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st = new StringTokenizer(br.readLine());

		ArrayList<Customer> list = new ArrayList<Customer>();
		
		//입력받기
		int N = Integer.parseInt(st.nextToken());
		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			int age = Integer.parseInt(st.nextToken());
			String name = st.nextToken();
			
			list.add(new Customer(i,name,age));
		}
		
		//정렬
		Collections.sort(list, new Comparator<Customer>() {

			@Override
			public int compare(Customer o1, Customer o2) {
				if(o1.age < o2.age)
					return -1;
				else if(o1.age == o2.age){
					if(o1.idx < o2.idx)
						return -1;
					else if (o1.idx > o2.idx)
						return 1;
					else
						return 0;
				}
				else 
					return 1;
			}
		});
		
		for (int i = 0; i < N; i++) {
			System.out.println(list.get(i).age+" "+list.get(i).name);
		}
	}

}

class Customer {
	int idx;
	String name;
	int age;
	
	public Customer(int i, String n , int a) {
		this.idx = i;
		this.name = n;
		this.age = a;
	}
}

 

728x90

+ Recent posts