본문 바로가기

코딩테스트/백준

[백준/10814] 나이순 정렬 - 자바

제가 풀어본 문제를 올리는 것으로 코드가 전혀 완벽하지 않습니다.

태클 걸어주세요.

 

문제

계속해서 풀어봤던 문제입니다 comparator를 사용하면 쉽게 풀 수 있습니다.

 

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class Q10814 {
	//나이순 정렬
	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int N = Integer.parseInt(bf.readLine());
		user[] arr = new user[N];
		
		
		for(int i=0;i<N;i++) {
			arr[i] = new user();
			StringTokenizer st = new StringTokenizer(bf.readLine()," ");
			arr[i].setNum(i);
			arr[i].setAge(Integer.parseInt(st.nextToken()));
			arr[i].setName(st.nextToken());
		}
		Arrays.sort(arr,new Comparator<user>() {

			@Override
			public int compare(user o1, user o2) {
				System.out.println(o1.getName() + " " + o2.getName());
				if(o1.getAge() == o2.getAge()) {
					return o1.getNum()-o2.getNum();
				}else {
					return o1.getAge()-o2.getAge();
				}
			}
		});
		
		for(user a : arr) {
			bw.write(a.getAge() + " " + a.getName() + "\n");
		}
		bw.flush();
		bw.close();
		bf.close();

	}

}
class user{ //user저장 
	int num;
	int age;
	String name;
	
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

코드설명

user를 담을 class를 따로 만들어 주고 배열로 선언합니다. 

그리고 comparator를 이용하여 기준을 정해주면 됩니다.

 

끝!