알고리즘/정렬

[백준]JAVA - 10814번: 나이순 정렬

K.두부 2022. 11. 5. 01:00
반응형

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

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net

풀이

단순한 정렬 문제로 여러 가지 방법으로 해결할 수 있다.

필자는 배열을 이용하지않고 클래스 객체를 만들어서 해결했다.

public static class Person implements Comparable<Person> {
    int age;
    String name;
        
    public Person (int age, String name) {
        this.age = age;
        this.name = name;
    }
        
    public int compareTo (Person o) {
        return this.age - o.age;
    }
}

위처럼 Person 클래스를 생성해서 나이와 이름을 변수로 받는 생성자를 만들고, Person 클래스를 하나의 타입으로 배열을 생성해준다. 위와 같은 방법은 자바에서 알고리즘 외에도 다루는 일이 엄청 많으므로 익혀두는 것을 추천한다.

 

나이순 정렬 또한 Arrays.sort()를 재정의하지 않고, 클래스에서 Comparable을 이용해서 해결할 수 있다.

이름순은 따로 정의해주지 않으면 나이순으로 정렬하면서 입력순으로 자동으로 정렬해주기 때문에 신경 쓰지 않아도 된다.

 

다른 방법으로 Arrays.sort()를 활용하는 방법은 아래와 같다.

Arrays.sort(arr, new Comparator<String[]>() {
    
    public int compare(String[] s1, String[] s2) {
        return Integer.parseInt(s1[0]) - Integer.parseInt(s2[0]);
    }
});

 

잘 모르겠다면 아래 문제 풀이에 상세하게 작성했으니까 참고하면 좋을 것 같다.

 

[백준]JAVA - 1931번: 회의실배정

https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 풀이 회의가 겹치지않도록 최대한 많은 회의를 배정하는 게 이 문제의 목표이다. 쉽게 말해

sookr5416.tistory.com

 

<최종코드>

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

public class Main {
    public static class Person implements Comparable<Person> {
        int age;
        String name;
        
        public Person (int age, String name) {
            this.age = age;
            this.name = name;
        }
        
        public int compareTo (Person o) {
            return this.age - o.age;
        }
    }
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        
        int N = Integer.parseInt(br.readLine());
        Person[] person = new Person[N];
        
        for (int i=0; i<N; i++) {
            st = new StringTokenizer(br.readLine());
            
            int age = Integer.parseInt(st.nextToken());
            String name = st.nextToken();
            
            person[i] = new Person(age, name);
        }
        
        Arrays.sort(person);
        
        for (int i=0; i<N; i++) {
            System.out.println(person[i].age + " " + person[i].name);
        }
    }
}

 

반응형