[백준 / java] 10814 : 나이순 정렬

chaen-ing·2024년 3월 20일
0

1일1백준

목록 보기
3/18

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

package boj10814;
import java.io.*;
import java.util.*;
import java.lang.*;

public class Main {
    public static void main(String []args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<Member> arrayList = new ArrayList<>();

        int n = Integer.parseInt(br.readLine());

        // 회원 입력
        while(n-->0){
            StringTokenizer st = new StringTokenizer(br.readLine());
            int age = Integer.parseInt(st.nextToken());
            Member member = new Member(age, st.nextToken());
            arrayList.add(member);
        }

        Collections.sort(arrayList);

        for(int i = 0; i < arrayList.size(); i++){
            System.out.println(arrayList.get(i).age+" "+arrayList.get(i).name);
        }

    }
}

class Member implements Comparable<Member>{
    int age;
    String name;

    Member(int age, String name){
        this.age = age;
        this.name = name;
    }

    @Override
    public int compareTo(Member o) {
        return this.age - o.age;
    }
}

Comparable<> vs Comparable<>

Comparable : 자기자신과 매개변수 객체를 비교 → lang import

CompareTo메소드를 Override해서 구현하여 비교 → CompareTo반드시 구현해야

자기자신과 상대방을 비교

@Override
	public int compareTo(Student o) {
    
		// 자기자신의 age가 o의 age보다 크다면 양수
		if(this.age > o.age) {
			return 1;
		}
		// 자기 자신의 age와 o의 age가 같다면 0
		else if(this.age == o.age) {
			return 0;
		}
		// 자기 자신의 age가 o의 age보다 작다면 음수
		else {
			return -1;
		}
	}
class Student implements Comparable<Student> {
 
	int age;			// 나이
	int classNumber;	// 학급
	
	Student(int age, int classNumber) {
		this.age = age;
		this.classNumber = classNumber;
	}
	
	@Override
	public int compareTo(Student o) {
 
		/*
		 * 만약 자신의 age가 o의 age보다 크다면 양수가 반환 될 것이고,
		 * 같다면 0을, 작다면 음수를 반환할 것이다.
		 */
		return this.age - o.age;
	}
}

// 내림차순
return -(this.age - o.age);

위와같이 간단하게 비교가능

Comparator : 두 매개변수 객체를 비교 → util import

@Override
	public int compare(Student o1, Student o2) {
    
		// o1의 학급이 o2의 학급보다 크다면 양수
		if(o1.classNumber > o2.classNumber) {
			return 1;
		}
		// o1의 학급이 o2의 학급과 같다면 0
		else if(o1.classNumber == o2.classNumber) {
			return 0;
		}
		// o1의 학급이 o2의 학급보다 작다면 음수
		else {
			return -1;
		}
	}
   
@Override
	public int compare(Student o1, Student o2) {
 
		/*
		 * 만약 o1의 classNumber가 o2의 classNumber보다 크다면 양수가 반환 될 것이고,
		 * 같다면 0을, 작다면 음수를 반환할 것이다.
		 */
		return o1.classNumber - o2.classNumber;
	}

양수 : 자리 바뀜
음수, 0 : 그대로

profile
💻 개발 공부 기록장

0개의 댓글

관련 채용 정보