백준 알고리즘
[JAVA]백준10814 나이순 정렬
방감자
2023. 1. 11. 16:51
나이순으로 정렬하는 것은 처음에 HashMap을 생각했었다.
하지만 HashMap은 Key값으로 중복된 값을 넣을 수 없어서 포기했다.
나이와 이름은 형이 다르기 때문에 나이배열과 이름배열 두 배열을 사용했다.
하나 더 문제가 있었는데, 바로 나이가 같으면 가입한 순으로 정렬을 해야하는 것이었다.
처음엔 그냥 빠른 정렬을 쓰고, 같은 나이가 있으면 그부분만 재정렬을 해주는 것을 생각했다.
그렇게 되면 정렬이 2번이나 이루어져야 하기에 제자리정렬인 삽입 정렬을 사용했다.
제자리 정렬이기 때문에 같은 나이일 경우에 가입순서를 건들지 않을 수 있었다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Beak10814 { //나이순 정렬
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int numOfMenmber = Integer.parseInt(br.readLine());
int []ageArr = new int[numOfMenmber];
String []nameArr = new String[numOfMenmber];
for(int i=0;i<numOfMenmber;i++){
st = new StringTokenizer(br.readLine());
ageArr[i] = Integer.parseInt(st.nextToken());
nameArr[i] = st.nextToken();
}
for (int i=1;i<numOfMenmber;i++){
int itemp = ageArr[i];
String stemp = nameArr[i];
int prev = i-1;
while (prev >=0 && ageArr[prev]>itemp){
ageArr[prev+1] = ageArr[prev];
nameArr[prev+1] = nameArr[prev];
prev--;
}
ageArr[prev+1] = itemp;
nameArr[prev+1] = stemp;
}
for (int i=0;i<numOfMenmber;i++){
System.out.println(ageArr[i]+" "+nameArr[i]);
}
}
}