1 분 소요

1. 문제

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

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

// 입력
첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)

둘째 줄부터 N개의 줄에는
각 회원의 나이와 이름이 공백으로 구분되어 주어진다.
나이는 1보다 크거나 같으며,
200보다 작거나 같은 정수이고,
이름은 알파벳 대소문자로 이루어져 있고,
길이가 100보다 작거나 같은 문자열이다.
입력은 가입한 순서로 주어진다.

// 출력
첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순,
나이가 같으면 가입한 순으로
한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.

// 예제 입력 1
3
21 Junkyu
21 Dohyun
20 Sunyoung

// 예제 출력 1
20 Sunyoung
21 Junkyu
21 Dohyun


2. 핵심 아이디어

  • (나이, 이름)의 정보를 입력 받은 뒤에 나이를 기준으로 정렬
  • 파이썬의 기본 정렬 라이브러리를 이용
  • 나이가 동일한 경우, 먼저 입력된 이름 순서를 따르도록 key 속성을 설정


3. Python 문제풀이

import sys

n = int(sys.stdin.readline())
info = list()

for _ in range(n) :
  input_data = sys.stdin.readline().split()
  info.append((int(input_data[0]), input_data[1]))

info = sorted(info, key = lambda x: x[0])

for i in info :
  print(i[0], i[1])


4. Java 문제풀이

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

class Main {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    int N = Integer.parseInt(br.readLine());

    Person[] p = new Person[N];

    for (int i=0; i<N; i++) {
      StringTokenizer st = new StringTokenizer(br.readLine(), " ");
      int age = Integer.parseInt(st.nextToken());
      String name = st.nextToken();
      p[i] = new Person(age, name);
    }

    Arrays.sort(p, new Comparator<Person>() {
      @Override
      public int compare(Person s1, Person s2) {
        return s1.age - s2.age;
      }
    });

    StringBuilder sb = new StringBuilder();

    for (int i=0; i<N; i++) {
      sb.append(p[i]);
    }
    System.out.println(sb);
  }

  public static class Person {
    int age;
    String name;

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

    public String toString() {
      return age + " " + name + "\n";
    }
  }
}

댓글남기기