
아악 붙끝코 2알차이다. 자바로 코테 언어를 제한 해놓는 상당히 있음 + 메인 스텍을 자바 스프링으로 가져가려다보니 자바로 코테 언어를 바꿨는데!!!! 그래도 아직은 코테는 파이썬 훨씬이 편한 것 같다.ㅜ 징징 그만대고 2일차도 가보자고.
오늘의 문제
나이순 정렬
첫번째 입력: 온라인 저지 회원 수 N
두번째 입력 : N명에 해당하는 온라인 저지의 이름과 나이 입력
정렬: 나이순 대로. 나이가 같은 경우 가입순 대로
우선 회원수가 10만명까지 가능하므로 이중 반복문 돌리는 것응 어려움.
1. 이차원 배열에 이름,나이 저장 후 나이 순대로 정렬. 정렬 방법은 Arrays.sort()에 Comparator 의 compare 메소드를 구현하여 사용자 정렬을 사용해서 쓸 수 있다.
compare 메소드는
• 나이의 차이가 양수이면 s2가 앞에 와야 하므로 s2를 먼저 놓고,
• 차이가 0이면 순서를 유지하며,
• 차이가 음수이면 s1이 앞에 와야 하므로 s1을 먼저 놓는다.
1번 코드에서 이상은 없었지만 속도 저하로 다른 방법을 생각해봄.
1번 코드
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
// 저지 인원 수 받기
int n = sc.nextInt();
String [][] arr= new String [n][2];// 이름과 나이 받기
for(int i=0;i<n; i++){
arr[i][0]=sc.next(); // 나이
arr[i][1]=sc.next(); // 이름
}
Arrays.sort(arr, new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return Integer.parseInt(o1[0]) - Integer.parseInt(o2[0]);
}
});
for(int i=0;i<n;i++){
System.out.println(arr[i][0]+" "+arr[i][1]);
}
}
}
2번
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
class Person {
int age;
String name;
Person(int age, String name) {
this.age = age;
this.name = name;
}
}
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 저지 인원 수 받기
int n = Integer.parseInt(br.readLine());
Person[] arr = new Person[n];
for (int i = 0; i < n; i++) {
String[] input = br.readLine().split(" ");
int age = Integer.parseInt(input[0]);
String name = input[1];
arr[i] = new Person(age, name);
}
// 나이순으로 정렬
Arrays.sort(arr, Comparator.comparingInt(p -> p.age));
for (Person p : arr) {
bw.write(p.age + " " + p.name + "\n");
}
bw.flush();
br.close();
bw.close();
}
}