728x90
반응형

문제

정답
1차 시도
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String[] numList = new String[N];
for(int i = 0 ; i < N; i++) {
numList[i] = br.readLine();
}
Arrays.sort(numList);
for(int j = 0; j < N; j++){
System.out.println(numList[j]);
}
}
}
이전 나이순 정렬 문제를 통해 Arrays.sort()가 나이 뿐만 아니라 이름도 정렬되어 출력되는 것을 확인하고
이 문제와 찰떡이라고 생각해서 코드를 뚝딱 작성했지만 실패라고 나왔다..왤까????
아무튼 안된다는 것을 확인하고
2차 배열에 담아서 Arrays.sort()를 수정하여 정렬해주어야 되겠구나 싶었다.
참고로 Arrays.sort()는 2차원 배열을 사용하려면 오버라이딩 해야 한다.
최종 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[][] numList = new int[N][2];
for(int i = 0 ; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
numList[i][0] = Integer.parseInt(st.nextToken());
numList[i][1] = Integer.parseInt(st.nextToken());
}
Arrays.sort(numList, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[0] == o2[0]) {
return o1[1] - o2[1];
}
else {
return o1[0] - o2[0];
}
}
});
for(int j = 0; j < N; j++){
System.out.println(numList[j][0] + " " + numList[j][1]);
}
}
}
참고로 Arrays.sort()를 확장할 때 람다식으로도 확장이 가능한데
자세한 설명은 아래 블로그를 참고하면 좋을 거 같다.
알고리즘 뿐만 아니라 자바에 대해서 깊게 설명해주셔서 정말 좋은 블로그인 거 같다.
[백준] 11650번 : 좌표 정렬하기 - JAVA [자바]
www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항
st-lab.tistory.com
728x90
반응형
'Computer Science (CS) > 알고리즘' 카테고리의 다른 글
| [백준/Java] 9012번 괄호 (1) | 2024.11.17 |
|---|---|
| [백준/Java] 2164번 카드2 (0) | 2024.11.03 |
| [백준/Java] 10814번 나이순 정렬 (0) | 2024.10.27 |
| [백준/Java] 11050번 이항 계수 1 (0) | 2024.10.18 |
| [백준/Java] 2609번 최대공약수와 최소공배수 (1) | 2024.10.16 |