Jun's Development Journey

[BOJ] 10814번 나이순 정렬 본문

BOJ/Sorting

[BOJ] 10814번 나이순 정렬

J_Jayce 2021. 2. 16. 00:01

문제

www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

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

www.acmicpc.net

 

풀이

1) Person 클래스, Comparable 활용

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


class Member implements Comparable<Member>{
	int age,seq;
	String name;
	public Member(int age, int seq, String name) {
		this.age = age;
		this.seq = seq;
		this.name = name;
	}
	@Override
	public int compareTo(Member that) {
		// TODO Auto-generated method stub
		if(this.age < that.age) {
            return -1;
        } else if(this.age == that.age) {
            if(this.seq < that.seq) {
                return -1;
            } else if(this.seq == that.seq) {
                return 0;
            } else {
                return 1;
            }
        } else {
            return 1;
        }
	}
	
}
public class Main {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		//입력
		Member[] members = new Member[N];
		for(int i=0;i<N;i++) {
			StringTokenizer st = new StringTokenizer(br.readLine()," ");
			int age = Integer.parseInt(st.nextToken());
			String name = st.nextToken();
			members[i] = new Member(age, i, name);
		}
		
		//정렬
		Arrays.sort(members);
		//출력
		for(Member m : members) {
			sb.append(m.age +" "+m.name+"\n");
		}
			
		System.out.println(sb);
	}
}

 

2) 카운팅 정렬 활용

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

public class Main {
	public static StringBuilder sb = new StringBuilder();
	public static void main(String[] args) throws NumberFormatException, IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
		int N = Integer.parseInt(br.readLine());
 
		// 입력되는 나이의 범위 : 1 ~ 200
		StringBuilder[] person = new StringBuilder[201];
		
		for(int i = 0; i < person.length; i++) {
			person[i] = new StringBuilder();
		}
		
		for(int i = 0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			int age = Integer.parseInt(st.nextToken());
			String name = st.nextToken();
			// 카운팅 정렬 => 나이를 index로 나이와 이름을 받는다.
			person[age].append(age).append(' ').append(name).append('\n');
		}
		
		StringBuilder sb = new StringBuilder();
		for(StringBuilder val : person) {
			sb.append(val);
		}
        System.out.println(sb);
	}
}

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

[BOJ] 11650 좌표 정렬하기  (0) 2021.02.18