10825번: 국영수
첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1
www.acmicpc.net
[문제]
도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다.
이때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오.
-
국어 점수가 감소하는 순서로
-
국어 점수가 같으면 영어 점수가 증가하는 순서로
-
국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
-
모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)
<알고리즘 분류> 정렬
[input]
첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다.
둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다.
점수는 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.
이름은 알파벳 대소문자로 이루어진 문자열이고, 길이는 10자리를 넘지 않는다.
[output]
문제에 나와있는 정렬 기준으로 정렬한 후 첫째 줄부터 N개의 줄에 걸쳐 각 학생의 이름을 출력한다.
[풀이 방법]
-
BufferedReader와 BufferedWriter 활용하여 입출력
-
Student 클래스 생성하여 name, korean, english, math 변수에 각각의 내용 입력받아 객체 생성
-
국어 내림차순 - 영어 오름차순 - 수학 내림차순 - 이름 오름차순에 해당하는 compare함수 오버라이딩
-
반대로 이름, 수학, 영어, 국어 순으로 sort호출하여 각 compare함수 호출
-
정렬된 배열에 대해 학생의 이름만 한 줄씩 출력
성공 코드
'Android ᙏ̤̫͚ > 차근차근 JAVA' 카테고리의 다른 글
[백준 11004번] K번째 수 (0) | 2021.02.10 |
---|---|
[백준 10989번] 수 정렬하기 3 (0) | 2021.02.10 |
[백준 10814번] 나이순 정렬 (0) | 2021.02.09 |
[백준 11651번] 좌표 정렬하기 2 (0) | 2021.02.09 |
[백준 11650번] 좌표 정렬하기 (0) | 2021.02.09 |