문제 탐색하기
N : 회원의 수
입력 : 온라인 저지에 가입한 사람들의 나이와 이름 (가입순)
출력 : 나이 오름차순 정렬, 나이가 같으면 가입순으로 정렬
가능한 시간복잡도
N이 최대 100,000으로 최악의 경우 O(n^2) 은 불가능, O(n) 시간 안에 해결해야함이차원배열 정렬을 위해 내장 sort() 함수와 Lambda 함수를 사용함
코드 설계하기
1. 회원 수 N 를 입력받는다 .
2. 회원 수 만큼 for문을 돌리며 배열에 나이와 이름을 저장한다.
3. 나이를 기준으로 오름차순 정렬을 한다.
4. 나이가 같으면, 가입순으로 정렬을 한다.
5. 정렬된 배열을 출력한다.
풀이 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine()); // 회원수
String[][] arr = new String[num][2]; // 회원 이차원배열
// 1. 회원 이차원 배열에 담기
for(int i=0;i<num;i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
while(st.hasMoreTokens()) {
arr[i][0]= st.nextToken(); // age
arr[i][1] = st.nextToken(); // name
}
}
// 2. arr[0](나이)을 기준으로 정렬
Arrays.sort(arr, (o1,o2) -> {
return Integer.parseInt(o1[0]) - Integer.parseInt(o2[0]);
});
// 3. 출력
for(int i=0;i<num;i++) {
System.out.println(arr[i][0]+" "+arr[i][1]);
}
}
}
'코딩테스트' 카테고리의 다른 글
[백준] 2947번 : 나무 조각 자바(JAVA) 풀이 (1) | 2024.09.14 |
---|---|
[백준] 25305번 : 커트라인 자바(JAVA) 풀이 (2) | 2024.09.13 |
[백준] 5635번 : 생일 자바(JAVA) 풀이 (0) | 2024.09.12 |
[백준] 1181번 : 단어 정렬 자바(JAVA) 풀이 (0) | 2024.09.11 |
[백준] 2309번 : 일곱 난쟁이 자바(JAVA) 풀이 (0) | 2024.09.09 |