알고리즘 문제 풀이를 블로그에 올리는 이유는 풀이, 코드를 기록하기 위함이니
앞으로 문제를 다 긁어오기보다 링크만 두고 풀이가 잘 보이도록 포스팅 할 예정입니다!
이 문제는 입력된 <나이, 이름> 값들을
Comparator의 compare 메소드
를 override
하여 나이순으로 정렬import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
String[][] arr = new String[N][2];
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, new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return Integer.parseInt(o1[0]) - Integer.parseInt(o2[0]);
}
});
StringBuilder sb = new StringBuilder();
for(int i =0; i < N; i++) {
sb.append(arr[i][0]).append(" ").append(arr[i][1]).append("\n");
}
System.out.println(sb);
}
}
Comparator의 comparingInt 메소드
+ 람다식
으로 나이순 정렬import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
String[][] arr = new String[N][2];
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, Comparator.comparingInt(o -> Integer.parseInt(o[0])));
StringBuilder sb = new StringBuilder();
for(int i =0; i < N; i++) {
sb.append(arr[i][0]).append(" ").append(arr[i][1]).append("\n");
}
System.out.println(sb);
}
}
코드 출처 : Stranger's LAB
st_님(닉네임이 이게 맞으실까..?)의 Stranger's LAB에 가면 하나의 문제에 대해 다양한 풀이가 있고,
마지막에 각 풀이의 성능도 비교해주셔서 문제를 풀고나서도 종종 찾아가 구경한다.
이번에도 나는 전혀 생각 못한 놀라운 풀이를 발견해서 클론 코딩하면서 이해하려고 노력했다!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
// 입력되는 나이의 범위 : 1 ~ 200
StringBuilder[] sba = new StringBuilder[201];
for(int i = 0; i < sba.length; i++) {
sba[i] = new StringBuilder();
}
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine(), " ");
int age = Integer.parseInt(st.nextToken());
String name = st.nextToken();
sba[age].append(age).append(" ").append(name).append("\n");
}
StringBuilder sb = new StringBuilder();
for(StringBuilder s : sba) {
sb.append(s);
}
System.out.println(sb);
}
}