PS/BOJ2022. 5. 6. 23:07

나이순 정렬 : https://www.acmicpc.net/problem/10814

 

숏코드 : https://www.acmicpc.net/source/15915926

 

 

방법 1. String 배열에 저장 후, Age만 비교하여 정렬

age가 같을 경우 들어온 순서가 유지됨.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
//https://www.acmicpc.net/source/15915926
public class Main {

	static int N;
	static boolean DBG = false;

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		N = Integer.parseInt(br.readLine());
		String[][] arr = new String[N][2];

		StringTokenizer st;

		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			arr[i][0] = st.nextToken();
			arr[i][1] = st.nextToken();
		}

		Arrays.sort(arr, (s1, s2) -> {
			return Integer.parseInt(s1[0]) - Integer.parseInt(s2[0]);
		});

		StringBuilder sb = new StringBuilder();

		for (int i = 0; i < N; i++) {
			sb.append(String.format("%s %s\n", arr[i][0], arr[i][1]));
	}

		System.out.println(sb);

	}
}

 

방법 2. 클래스를 만들어서 정렬, 순서를 기억하기 위해 id를 추가함

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

public class Main {

	static int N;
	static boolean DBG = false;

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		N = Integer.parseInt(br.readLine());
		Person[] arr = new Person[N];
		StringTokenizer st;

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

		Arrays.sort(arr, (p1, p2) -> {
			if (p1.age == p2.age) {
				return p1.id - p2.id;
			} else {
				return p1.age - p2.age;
			}
		});

		StringBuilder sb = new StringBuilder();

		for (Person p : arr)
			sb.append(String.format("%d %s\n", p.age, p.name));
		System.out.println(sb);

	}
}

class Person {
	int age, id;
	String name;

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

 

 

방법 3. ArrayList의 배열을 만들고, index를 age로 설정, age가 같은 경우 이후 입력된 순서대로 add 되므로 그대로 출력한다. (List가 비었을 경우, arr.[i].size는 0이 되므로 null 체크를 할 필요가 없다.)

 

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

public class Main {

	static int N;
	static boolean DBG = false;

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		N = Integer.parseInt(br.readLine());
		ArrayList[] arr = new ArrayList[201];

		StringTokenizer st;

		for (int i = 0; i < 201; i++) 
			arr[i] = new ArrayList<String>();
		
		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			arr[Integer.parseInt(st.nextToken())].add(st.nextToken());
		}

		StringBuilder sb = new StringBuilder();

		for (int i = 0; i < 201; i++) {
			for (int j = 0; j < arr[i].size(); j++) {
				String name = (String) arr[i].get(j);
				sb.append(String.format("%d %s\n", i, name));
			}
		}

		System.out.println(sb);

	}
}

 

 

 

 

 

'PS > BOJ' 카테고리의 다른 글

10989  (0) 2022.05.07
10825  (0) 2022.05.06
11650  (0) 2022.05.06
1260  (0) 2022.05.06
11047  (0) 2022.05.06
Posted by easy16