[백준] 10814

ninano05·2026년 4월 2일

다중 조건 정렬

  • 다양한 타입의 조건이 혼재해 있다.
  • int와 string은 한 배열 같이 넣을 수 없다.
  • peron 클래스를 만들어서 다양한 타입의 속성을 관리해준다

  • 다중 조건 정렬은 다음과 같이 람다를 사용했다.
  • person 클래스의 경우 int형으로 되어 있기에 바로 연산이 가능하다.
  • 다음과 같이 모든 속성을 String으로 했을 때는 형변환하여 계산이 필요했다.(좋은 방법은 아닌듯)
  • 이렇게 속성의 타입이 다양한 경우에는 클래스를 정의하고 객체로 생성하는 게 좋은 방식인듯 하다. (시간, 메모리 효율 월등히 좋음)

Person 클래스 활용

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

public class Main {

    static public class Person {
        int age;
        int order;
        String name;

        Person(int age, int order, String name) {
            this.age = age;
            this.order = order;
            this.name = name;
        }
    }

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(br.readLine());
        Person[] club = new Person[N];
        // 사람 객체 club 배열에 넣어주기
        for(int i=0; i<N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            club[i] = new Person(Integer.parseInt(st.nextToken()), i, st.nextToken());
        }

        Arrays.sort(club, (a, b) -> {
           if(a.age == b.age) return a.order - b.order;
           return a.age - b.age;
        });

        for(Person p : club) {
            bw.write(p.age+" "+p.name+"\n");
        }

        bw.flush();
        bw.close();
        br.close();
    }
}

String[]으로 형태 통합

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

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(br.readLine());
        String[][] club = new String[N][3]; //나이, 가입번호, 이름 순서로

        for(int i=0; i<N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            club[i][0] = st.nextToken();
            club[i][1] = String.valueOf(i);
            club[i][2] = st.nextToken();
        }
        // 정렬하기
        Arrays.sort(club, (a,b) -> {
            if(a[0].equals(b[0])) return Integer.parseInt(a[1]) -Integer.parseInt(b[1]);
            return Integer.parseInt(a[0]) -Integer.parseInt(b[0]);
        });

        for(String[] sa : club) {
            bw.write(sa[0]+" "+sa[2]+"\n");
        }

        bw.flush();
        bw.close();
        br.close();
    }
}
profile
초보 개발자

0개의 댓글