[백준 10814] 나이순 정렬

One-nt·2022년 7월 14일
0

백준

목록 보기
3/19

문제 출처

사용 언어: Java

  1. 구상
  • 입력은 나이, 이름 모두 문자열로 받기.
  • 2차원 배열에 나이-이름순으로 저장.
  • 나이만 비교하고 나이가 같으면 입력 그대로 출력.

  1. 1번째 구현 (시간초과)
import java.util.*;
import java.io.*;

public class Main {
	
	public static String[][] user; // 나이-이름 저장 배열
	public static int num; // 배열의 크기
	
    // 교환하기
	public static void swap(String[][] arr, int i, int j) {
		String[] temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;		
	}
	
	

	public static void main(String[] args) throws Exception {
		Scanner s = new Scanner(System.in);	
	
		num = s.nextInt();
		
		user = new String[num][2];
		
        // 문자열로 입력 받기
		for(int i = 0; i < num; i++) {
			user[i][0] = s.next();
			user[i][1] = s.next();
		}
		
        // bubble-sort로 정렬
		for (int i = num - 1; i >= 0; --i) {
			for (int j = 0; j < i; j++) {
           		//문자열인 나이를 정수로 전환
				int num1 = Integer.parseInt(user[j][0]);
				int num2 = Integer.parseInt(user[j+1][0]);
				
				if(num1 > num2)
					swap(user, j, j+1);
					
			}
		}
		
	
		// 출력
		for(int i = 0; i < num; i++)
			System.out.println(user[i][0] + " " + user[i][1]);
		
	}
	
	
	 

} 

bubble-sort로 구현하였으나 또 시간초과.
문자열인 나이 부분을 정수로 바꿔서 비교함.


  1. 2번째 구현

코드 참고 출처

import java.util.*;
import java.io.*;

public class Main {
	
	public static String[][] user;
	public static int num;	
	

	public static void main(String[] args) throws Exception {
		Scanner s = new Scanner(System.in);	
	
		num = s.nextInt();
		
		user = new String[num][2];
		
		for(int i = 0; i < num; i++) {
			user[i][0] = s.next();
			user[i][1] = s.next();
		}
		
		
		// 배열 정렬 기본 메소드 이용
		Arrays.sort(user, new Comparator<String[]>() {
			// 나이순으로 정렬
            // compare 메소드 재정의
			@Override
			public int compare(String[] s1, String[] s2) {
				return Integer.parseInt(s1[0]) - Integer.parseInt(s2[0]);
			}
			
		});
	
		
		for(int i = 0; i < num; i++)
			System.out.println(user[i][0] + " " + user[i][1]);
		
	}
	
	
	 

} 

객체를 비교하는 Comparator의 compare을 재정의함.
문자열인 나이를 정수로 전환하여 비교.

0개의 댓글