
이름과 성적들을 2차원 배열에 저장하고 람다식으로 정렬하려고 했는데 잘안됐다.
Student라는 클래스를 정의하고, 인원수 만큼 객체를 생성한 다음 조건에 맞게 정렬해줬다.
import java.io.*;
import java.util.*;
public class ArrayEx1{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 인원수를 입력받음
        int N = Integer.parseInt(br.readLine());
        
        // N명의 정보를 저장할 Student 타입의 배열 생성
        Student[] students = new Student[N];
        
        for(int i=0;i<N;i++) {
        // 입력받은 한 줄을 공백을 기준으로 나눔
        	String[] score = br.readLine().split(" ");
        	
            // 이름, 국어, 영어, 수학 값을 생성자에 넘겨줘서 객체를 생성함
        	students[i] = new Student(score[0],
        			Integer.parseInt(score[1]),
        			Integer.parseInt(score[2]),
        			Integer.parseInt(score[3]));
        	}
        
        Comparator<Student> myComparator = new Comparator<Student>() {
        	@Override
            // 두 Student 객체를 비교함
        	public int compare(Student o1, Student o2) {
        		if(o1.korean==o2.korean) {
        			if(o1.english==o2.english) {
        				if(o1.math==o2.math) {
                        	// 이름 오름차순으로 정렬
        					return o1.name.compareTo(o2.name);
        				}
        				// 수학 점수 내림차순으로 정렬
        				return o2.math-o1.math;
        			}
                    // 영어 점수 오름차순으로 정렬
        			return o1.english - o2.english;
        		}
                // 국어 점수 내림차순으로 정렬
        		return o2.korean-o1.korean;
        	}
        };
        // 위 조건을 이용해 students 배열을 정렬
        Arrays.sort(students, myComparator);
        // 정렬된 객체들의 이름만 출력
        for(int i=0;i<N;i++) System.out.println(students[i].name);
    }
    
    
}
class Student{
	String name;
	int korean;
	int english;
	int math;
	
	Student(String name, int korean, int english, int math){
		this.name = name;
		this.korean = korean;
		this.english = english;
		this.math = math;
	}
}
시간이 지나 다시 2차원 String 배열의 형태로 문제를 풀어봤다.
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[][] arr = new String[n][4];
        for(int i=0;i<n;i++){
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            arr[i][0] = st.nextToken();
            arr[i][1] = st.nextToken();
            arr[i][2] = st.nextToken();
            arr[i][3] = st.nextToken();
        }
        
        Arrays.sort(arr,(o1,o2)->{
            
            // equals()는 문자열의 내용이 같은지 비교
            // String==String은 두 String의 주소값이 같은지 비교하는 것임
            
            if(o1[1].equals(o2[1])){
                if(o1[2].equals(o2[2])){
                    if(o1[3].equals(o2[3])){
                    
                    // String.compareTo()는 문자열을 비교하는 메서드
                    // a 같은 숫자가 아닌 문자열에는 Integer.parseInt()사용할 수 없음!!
                    // 문자열로 이루어진 과목명을 비교하기 위해서 사용함
                        return o1[0].compareTo(o2[0]);
                    }
                    
                    // 과목의 점수는 숫자이기 때문에 int로 변환해서 비교하는 것이 가능한 것
                    return Integer.parseInt(o2[3])-Integer.parseInt(o1[3]);
                }
                return Integer.parseInt(o1[2])-Integer.parseInt(o2[2]);
            }
            
                return Integer.parseInt(o2[1])-Integer.parseInt(o1[1]);
            
        });
        for(int i=0;i<n;i++){
            System.out.println(arr[i][0]);
        }
    }
}'Algorithm > [BOJ] - JAVA' 카테고리의 다른 글
| [백준] 1541 : 잃어버린 괄호 JAVA 풀이 (0) | 2022.06.17 | 
|---|---|
| [백준] 12101 : 1, 2, 3 더하기 2 JAVA 풀이 (0) | 2022.06.11 | 
| [백준] 11652 : 카드 JAVA 풀이 (0) | 2022.06.11 | 
| [백준] 11004 : K번째 수 JAVA 풀이 (0) | 2022.06.11 | 
| [백준] 11057 : 오르막 수 JAVA 풀이 (0) | 2022.06.10 | 
 
									
								 
									
								 
									
								