[백준] 5635번: 생일 (Java)

seri·2024년 6월 27일
0

코딩테스트 챌린지

목록 보기
4/62

문제: https://www.acmicpc.net/problem/5635

📌 문제 탐색하기

입력 : 첫째 줄 - 학생 수 (1 ≤ 학생 수 ≤ 100)
둘째 줄부터 - 이름 dd mm yyyy (1990 ≤ yyyy ≤ 2010, 1 ≤ mm ≤ 12, 1 ≤ dd ≤ 31)
단, 이름이 같거나 생일이 같은 사람은 없다.
출력 : 첫째 줄 - 가장 나이가 적은 사람의 이름
둘째 줄 - 가장 나이가 많은 사람의 이름

가능한 시간복잡도

O(NlogN)

알고리즘 선택

팀소트 알고리즘

📌 코드 설계하기

  1. 첫째 줄에 학생 수를 Input으로 받는다.
  2. 둘째 줄부터 이름 dd mm yyyy 를 Input으로 받는다.
  3. Arrays.sort, Comparator를 사용해 나이순으로 정렬한다.
  4. 첫째 줄에 가장 나이가 적은 사람의 이름을, 둘째 줄에 가장 나이가 많은 사람의 이름을 출력한다.

📌 시도 회차 수정 사항 (Optional)

💡 시도별 수정 사항은 어떻게 작성하나요?
- 무문별하게 “맞았습니다”가 나올때 까지 수정하는 형태의 문제 풀이를 반복하면 , 내가 어떤 실수를 해서 해당 문제를 틀렸는지 모르게 됩니다.
- 틀렸습니다를 받았다면 왜 틀렸는지 고민해보고 , 어떻게 수정할 수 있는지 고민하는 과정을 작성해주시면 됩니다.
- 위에 내가 세울 설계에서 어떤 부분이 틀렸는지도 함께 점검해보세요
- 한번에 맞출수도 있기 때문에 이 칸은 Optional입니다.

1회차

생년월일을 오름차순으로 정렬하면 맨 처음에 정렬된 생년월일이 가장 나이가 많다.

2회차

📌 정답 코드

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); 
        
        int n = sc.nextInt();
        String[][] person = new String[n][4];
        
        for (int i = 0; i < n; i++) {
            person[i][0] = sc.next(); //이름
            person[i][1] = sc.next(); //일
            person[i][2] = sc.next(); //월
            person[i][3] = sc.next(); //년도
        }
        
        Arrays.sort(person, new Comparator<String[]>() {
           public int compare(String[] a, String[] b) {
               if (!a[3].equals(b[3])) {
                   return Integer.parseInt(a[3]) - Integer.parseInt(b[3]);
               } else {
                   if (!a[2].equals(b[2])) {
                       return Integer.parseInt(a[2]) - Integer.parseInt(b[2]);
                   } else {
                       return Integer.parseInt(a[1]) - Integer.parseInt(b[1]);
                   }
               }
           }
        });
        
        System.out.println(person[n-1][0]); //가장 나이가 적은 사람
        System.out.println(person[0][0]); //가장 나이가 많은 사람
        
        sc.close();
    }
}
profile
꾸준히 정진하며 나아가기

0개의 댓글