21.08.28 기록
백준 알고리즘 10814 풀이
🎆나의 풀이(메모리 50.8MB, 시간 792ms로 통과)
-이 문제 역시 Arrays.sort()에 Comparator를 사용한 알고리즘으로 풀이했다.
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 B10814 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st;
String[][] info = new String[N][2];
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine(), " ");
info[i][0] = st.nextToken();
info[i][1] = st.nextToken();
}
//info 배열의 인덱스 0번째 요소의 값을 정수형으로 비교하여 결과를 return한다.
Arrays.sort(info, Comparator.comparingInt(e -> Integer.parseInt(e[0])));
StringBuilder sb = new StringBuilder();
for(int i = 0; i < N; i++) {
sb.append(info[i][0]).append(" ").append(info[i][1]).append("\n");
}
System.out.println(sb);
}
}
🎆해설(메모리 41.7MB, 시간 472ms로 통과)
-Person이라는 클래스를 만들고 객체를 생성하여 입력값을 저장하여 Arrays.sort를 사용하는 방법이 있다.
-또 하나의 방법은, StringBuilder를 배열처럼 사용하여 카운팅 정렬의 형태로 사용하는 것이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class B10814 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
//StringBuilder 배열을 카운텅 정렬 형태로 사용하기
StringBuilder[] sbArr = new StringBuilder[201];
for(int i = 0; i < sbArr.length; i++) {
sbArr[i] = new StringBuilder();
}
StringTokenizer st;
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine(), " ");
int age = Integer.parseInt(st.nextToken());
String name = st.nextToken();
//sbArr[age] 안에 "나이 이름" 저장
sbArr[age].append(age).append(' ').append(name).append('\n');
}
StringBuilder sb = new StringBuilder();
for(int i = 0; i < sbArr.length; i++) {
sb.append(sbArr[i]);
}
System.out.println(sb);
}
}