💻 Algorithm/Baekjoon

[JAVA] 백준 5635 - 생일

dlalwl_jpg 2022. 8. 15. 16:45

실버V

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

 

5635번: 생일

어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오.

www.acmicpc.net

문제

어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오.


입력

첫째 줄에 반에 있는 학생의 수 n이 주어진다. (1 ≤ n ≤ 100)

다음 n개 줄에는 각 학생의 이름과 생일이 "이름 dd mm yyyy"와 같은 형식으로 주어진다. 이름은 그 학생의 이름이며, 최대 15글자로 이루어져 있다. dd mm yyyy는 생일 일, 월, 연도이다. (1990 ≤ yyyy ≤ 2010, 1 ≤ mm ≤ 12, 1 ≤ dd ≤ 31) 주어지는 생일은 올바른 날짜이며, 연, 월 일은 0으로 시작하지 않는다.

이름이 같거나, 생일이 같은 사람은 없다.


출력

첫째 줄에 가장 나이가 적은 사람의 이름, 둘째 줄에 가장 나이가 많은 사람 이름을 출력한다.


접근 방법

년도, 월, 날짜 순으로 오름차순 정렬하여 가장 나이가 많은 사람은 정렬의 맨 마지막 배열로 출력, 가장 나이가 적은 사람은 정렬의 맨 처음으로 출력하였다.


코드

package bj5635;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class bj5635 {

	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		//학생 수 입력
		int n = Integer.parseInt(st.nextToken());
		
		//변수 선언
		String[] name = new String[n];
		String[] dd = new String[n];
		String[] mm = new String[n];
		String[] yy = new String[n];
		int temp;
		
		//이름 날, 달, 년도 입력
		for(int i = 0; i < n; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			name[i] = st.nextToken();
			dd[i] = st.nextToken();
			mm[i] = st.nextToken();
			yy[i] = st.nextToken();
		}
		
		//오름차순 정렬
		for(int i = 0; i < n; i++) {
			
			for(int j = i; j < n; j++) {
				
				//년도로 오름차순 정렬
				if(Integer.parseInt(yy[i]) > Integer.parseInt(yy[j])) {
					sort(yy, i, j);
					sort(mm, i, j);
					sort(dd, i, j);
					sort(name, i, j);
				}
				
				//년도가 같다면 월로 오름차순 정렬
				else if(Integer.parseInt(yy[i]) == Integer.parseInt(yy[j])) {
					if(Integer.parseInt(mm[i]) > Integer.parseInt(mm[j])) {
						sort(yy, i, j);
						sort(mm, i, j);
						sort(dd, i, j);
						sort(name, i, j);
					}
					
					//월이 같다면 날짜로 오름차순 정렬
					if(Integer.parseInt(mm[i]) == Integer.parseInt(mm[j])) {
						if(Integer.parseInt(dd[i]) > Integer.parseInt(dd[j])) {
							sort(yy, i, j);
							sort(mm, i, j);
							sort(dd, i, j);
							sort(name, i, j);
						}
					}
				}
			}
		}
		
		System.out.println(name[n - 1]); //가장 나이가 많은 학생
		System.out.println(name[0]); //가장 나이가 적은 학생
			
	}
	
	//자리를 바꾸는 함수
	public static void sort(String arr[], int i, int j) {
		
		String temp;
		
		temp = arr[j];
		arr[j] = arr[i];
		arr[i] = temp;
	}

}

NOTE

comparator와 compare를 사용하면 더 코드를 간단하게 할 수 있었다.

출처 - https://comain.tistory.com/298

'💻 Algorithm > Baekjoon' 카테고리의 다른 글

[JAVA] 백준 4539 - 반올림  (0) 2022.08.14
[JAVA] 백준 4383 - 점프는 즐거워  (0) 2022.08.12
[JAVA] 백준 15829 - Hashing  (0) 2022.08.05
[JAVA] 백준 9012 - 괄호  (0) 2022.08.02
[JAVA] 백준 10866 - 덱  (0) 2022.08.02