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[]userList = new String[N];
for(int i = 0 ; i < N; i++) {
userList[i] = br.readLine();
}
Arrays.sort(userList);
for(int j = 0; j < N; j++){
System.out.println(userList[j]);
}
}
}
예제를 봤을 때는 나이가 같으면 이름 정렬순으로 출력을 해줘야 되나 싶어서 고민이였는데
문제를 다시 읽어보니 나이순으로 하되 같은 나이면 먼저 온 순이였다
그럼 굳이 2차배열 안 쓰고 라인별로 리스트에 저장해서 정렬하고 출력하면 되는 거 아닌가 싶었다
그래서 위 코드로 테스트 실행을 해본 결과 아래와 같이 이름도 정렬되어 출력이 되었다.
20 Sunyoung
21 Dohyun
21 Junkyu
그래서 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());
String[][] userList = new String[N][2];
for(int i = 0 ; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
userList[i][0] = st.nextToken();
userList[i][1] = st.nextToken();
}
Arrays.sort(userList, new Comparator<String[]>() {
@Override
public int compare(String[] l1, String[] l2) {
return Integer.parseInt(l1[0]) - Integer.parseInt(l2[0]);
}
});
for(int j = 0; j < N; j++){
System.out.println(userList[j][0] + " " + userList[j][1]);
}
}
}
728x90
반응형
'Computer Science (CS) > 알고리즘' 카테고리의 다른 글
[백준/Java] 2164번 카드2 (0) | 2024.11.03 |
---|---|
[백준/Java] 11650번 좌표 정렬하기 (3) | 2024.10.27 |
[백준/Java] 11050번 이항 계수 1 (0) | 2024.10.18 |
[백준/Java] 2609번 최대공약수와 최소공배수 (1) | 2024.10.16 |
[백준/Java] 1259번 팰린드롬수 (1) | 2024.10.16 |