ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 5635번] 생일 (Java 풀이)
    Algorithm/기타 2020. 2. 5. 22:45

    백준알고리즘 5635번 : 생일

    나이가 많은 사람부터 순서대로 정렬하는 문제이다.

    태어난 연도, 월, 일 세 번을 비교해야 하기 때문에 단순 정렬이 아닌

    생년월일과 이름을 필드로 갖는 객체를 만들고, 이 object에 Comparable을 구현(Implements)한다.

     

    Comparable<T> interface안에는 int compareTo(T a)라는 단 하나의 interface method만 존재한다.

    해당 method는 리턴값을 3가지로 분류하고 있는데, 이는 다음과 같다.

    1. parameter보다 더 작은 경우 음수 return.

    2. parameter보다 더 큰 경우 양수 return.

    3. parameter와 같은 경우 0 return.

     

    Birthday라고 명명한 객체안에서 어떤 필드 값을 우선하여 비교해야하는 지 확인하고

    이에 따른 리턴값을 지정해주면 된다.

     

     

    풀이 과정


    1. 정수 3개(년, 월, 일)와 문자열 1개(이름)을 field로 하는 객체를 생성한다.
    2. 객체가 Comparable을 implements하도록 하고, compareTo method를 overide한다.
       overide한 compareTo method에서는 생일이 더 빠른 사람이 우선순위의 앞에 놓이도록
       조건문과 return 값을 배치한다.
    3. 1번에서 생성한 객체를 List에 담고, Scanner로 받아오는 것들을 하나씩 받아준 뒤
       해당 List를 sort해준다.

     

     

    소스 ▽

    더보기
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.List;
    import java.util.Scanner;
    
    public class Main {// no5635 생일
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int num = Integer.parseInt(sc.nextLine());
    		List<Birthday> arr = new ArrayList<Birthday>();
    		for (int i = 0; i < num; i++) {
    			Birthday my = new Birthday();
    			my.name = sc.next();
    			my.day = Integer.parseInt(sc.next());
    			my.month = Integer.parseInt(sc.next());
    			my.year = Integer.parseInt(sc.next());
    
    			arr.add(my);
    		}
    
    		arr.sort(Comparator.naturalOrder());
    		System.out.println(arr.get(0));
    		System.out.println(arr.get(arr.size() - 1));
    
    	}
    }
    
    class Birthday implements Comparable<Birthday> {
    	String name;
    	int month;
    	int day;
    	int year;
    
    	public Birthday(String name, int month, int day, int year) {
    		this.name = name;
    		this.month = month;
    		this.day = day;
    		this.year = year;
    	}
    
    	public Birthday() {
    		// TODO Auto-generated constructor stub
    	}
    
    	public String toString() {
    		return name;
    	}
    
    	@Override
    	public int compareTo(Birthday o) {
    		if (o.year > this.year) {
    			return 1;
    		} else if (o.year < this.year) {
    			return -1;
    		} else if (o.month > this.month) {
    			return 1;
    		} else if (o.month < this.month) {
    			return -1;
    		} else if (o.day > this.day) {
    			return 1;
    		}
    		return -1;
    	}
    }
    

     

     

     

    Summary


    1. Comparable<T> interface안에는 int compareTo(T a)라는 단 하나의 method만 존재한다.

       1. parameter보다 더 작은 경우 음수 return.

       2. parameter보다 더 큰 경우 양수 return.

       3. parameter와 같은 경우 0 return.

     

    댓글

Designed by Tistory.