문제
- 온라인 저지에 가입한 사람들의 나이와 이름이 주어질 때, 나이를 기준으로 오름차순으로 정렬하는 문제.
- 단, 나이가 같다면 입력된 순서대로 출력해야 함.
아이디어
- 나이와 이름을 String 배열에 담고 순서가 필요하므로 이를 ArrayList에 저장한다.
- Java의 comparator를 오버라이딩 하여 정렬한다.
- 나이가 다르다면 (숫자로 보이지만 문자열로 저장했기에 equals 메서드를 활용) 각 요소를 정수로 변환하고 빼서 구현, 같다면 순서를 바꾸지 않고 입력된 순서 그대로 둔다.
풀이
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
// 입력된 순서 기억을 위해 문자열 배열 ArrayList 선언
List<String[]> list = new ArrayList<>();
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
// 각 요소로 크기 2의 String 배열 추가
list.add(new String[]{st.nextToken(), st.nextToken()});
}
// comparator 오버라이딩
list.sort((n1, n2)->{
// 나이가 다르다면(문자열 비교 equals 사용)
if(!n1[0].equals(n2[0])) {
// 정수 타입으로 변환 후 뺀 값을 반환(순서 변경)
return Integer.parseInt(n1[0])- Integer.parseInt(n2[0]);
}
// 같다면 그대로 저장
else {
return 0;
}
});
for(String[] l: list){
sb.append(l[0]).append(' ').append(l[1]).append('\n');
}
System.out.println(sb);
}
}
채점 결과
문제 링크
'백준' 카테고리의 다른 글
[JAVA] 백준 11651번: 좌표 정렬하기 2 (2) | 2024.07.16 |
---|---|
[JAVA] 백준 11650번: 좌표 정렬하기 (1) | 2024.07.16 |
[JAVA] 백준 7568번: 덩치 (0) | 2024.07.15 |
[JAVA] 백준 2751번: 수 정렬하기 2 (0) | 2024.07.15 |
[JAVA] 백준 1676번: 팩토리얼 0의 개수 (0) | 2024.07.14 |