예은이의 이것저것
[백준 10825] 국영수 in JAVA 본문
10825번: 국영수
첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1
www.acmicpc.net

※ 풀이 방법
문제 풀이 방법은 어렵지 않았다. 주어진 네 가지 조건에 맞추어 데이터를 정렬하고, 각 학생의 이름을 순서대로 출력하면 되는 문제였다.
매우 직관적이지만 각 학생에 대한 데이터를 어떤 방식으로 저장할지, 어떻게 주어진 조건에 맞게 정렬할지가 조금 까다로운 부분이었다.
학생의 이름(String), 국어 점수(int), 영어 점수(int), 수학 점수(int)를 모두 함께 저장해주어야했기 때문에 문자열 배열을 사용했고, 각 점수를 비교할 때는 Integer.parseInt() 메소드를 사용하여 비교해주었다.
정렬 조건이 네 가지나 되고 저장 방식이 문자열 배열이었다보니 원래 형태의 Arrays.sort() 메소드로는 해결할 수 없었고, comparator의 compare 메소드를 수정하여 해결할 수 있었다.
※ 문제 풀이 코드

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class BOJ_10825 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
int N=input.nextInt();
String [][] student=new String[N][4];
for(int i=0;i<N;i++) {
student[i][0]=input.next();
student[i][1]=input.next();
student[i][2]=input.next();
student[i][3]=input.next();
}
Arrays.sort(student,new Comparator<String[]>() {
public int compare(String [] o1, String [] o2) {
if(Integer.parseInt(o1[1])<Integer.parseInt(o2[1]))
return 1;
else if(o1[1].equals(o2[1])) {
if (Integer.parseInt(o1[2])>Integer.parseInt(o2[2])) return 1;
else if(o1[2].equals(o2[2])) {
if(Integer.parseInt(o1[3])<Integer.parseInt(o2[3])) return 1;
else if(o1[3].equals(o2[3])) {
if(o1[0].compareTo(o2[0])>0) return 1;
}
}
}
return -1;
}
});
for(int i=0;i<N;i++)
System.out.println(student[i][0]);
}
}
'나는 컴공이다 > Algorithm in JAVA' 카테고리의 다른 글
| [백준 3665] 최종 순위 in JAVA (0) | 2021.02.08 |
|---|---|
| [백준 1697] 숨바꼭질 in JAVA (0) | 2021.02.04 |
| [백준 18352] 특정 거리의 도시 찾기 in JAVA (0) | 2021.02.01 |
| [백준 18428] 감시 피하기 in JAVA (0) | 2021.02.01 |
| [백준 20500] Ezreal 여눈부터 가네 ㅈㅈ in JAVA (0) | 2021.01.25 |