1. ๋ด๊ฐ ํผ ์ฝ๋
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int i = 1; i <= T; i++) {
//์
๋ ฅ ๊ฐ ๋ฐ๊ธฐ N: ์ด์ K: ์กฐํํ๊ณ ์ ํ๋ ํ์์ index
int N = sc.nextInt();
int K = sc.nextInt();
// hashMap -> key = ํ์์ ๋ฒํธ, value -> ์ด์
// ArrayList -> index: ์ํ ์์, value -> ์ด์
HashMap<Integer,Double> hashMap = new HashMap<>();
ArrayList<Double> grade = new ArrayList<>();
sc.nextLine();
// ์ด์ ์ ๊ณ์ฐํด์ ๊ฐ๊ฐ hashmap๊ณผ list์ ์ง์ด๋ฃ๊ธฐ
for (int j = 0; j < N; j++) {
String s = sc.nextLine();
double Total = 0;
String [] strings = s.split(" ");
Total = Integer.parseInt(strings[0])*0.35 + Integer.parseInt(strings[1])*0.45 + Integer.parseInt(strings[2])*0.2;
hashMap.put(j+1, Total);
grade.add(j, Total);
}
// list ์ ๋ ฌ
Collections.sort(grade, Collections.reverseOrder());
// ์ํ ์์ ์ถ์ถ
int rank = grade.indexOf(hashMap.get(K));
// ์ํ ์์์ ๋ง๋ ํ์ ๋ฐํ
if(rank >= 1 && rank < (N/10)) {
System.out.printf("#%d A+\n", i);
}
else if( rank >= (N/10) && rank < (N/10)*2){
System.out.printf("#%d A0\n", i);
}else if( rank >= (N/10)*2 && rank < (N/10)*3){
System.out.printf("#%d A-\n", i);
}else if( rank >= (N/10)*3 && rank < (N/10)*4){
System.out.printf("#%d B+\n", i);
}else if( rank >= (N/10)*4 && rank < (N/10)*5){
System.out.printf("#%d B0\n", i);
}else if( rank >= (N/10)*5 && rank < (N/10)*6){
System.out.printf("#%d B-\n", i);
}else if( rank >= (N/10)*6 && rank < (N/10)*7){
System.out.printf("#%d C+\n", i);
}else if( rank >= (N/10)*7 && rank < (N/10)*8){
System.out.printf("#%d C0\n", i);
}else if( rank >= (N/10)*8 && rank < (N/10)*9){
System.out.printf("#%d C-\n", i);
}else if( rank >= (N/10)*9 && rank < (N/10)*10){
System.out.printf("#%d D0\n", i);
}
}
}
}
๋ด ์ฝ๋๋ ํ๋ ์ฝ๋ฉ์ด ๋ง๊ณ ํฐ ๊ธธ์ ์ด๋ ต๊ฒ ๋์๊ฐ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
๋ค๋ฅธ ์ฌ๋ ์ฝ๋๋ฅผ ํ๋์ ์ ์ฐจ๊ฐํ๊ณ ๋ณด๋๋ก ํ๊ฒ ๋ค.
2. ๋ค๋ฅธ ์ฌ๋ ์ฝ๋
import java.util.Arrays;
import java.util.Scanner;
import java.util.Comparator;
class Solution
{
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
int T;
T=sc.nextInt();
String[] credit = {"A+", "A0", "A-", "B+", "B0", "B-", "C+", "C0", "C-", "D0"};
for(int test_case = 1; test_case <= T; test_case++)
{
int N = sc.nextInt(), K = sc.nextInt();
Student[] student = new Student[N];
// ํ์์ ๋ณด ์ ์ฅ
for (int i=0; i<N; i++) {
student[i] = new Student();
student[i].k = i+1; //k = index -> ํ์ ๋ฒํธ
student[i].score = (sc.nextInt()*35 + sc.nextInt()*45 + sc.nextInt()*20); //score -> ์ด์
}
// ์ ๋ ฌ
// -> ๊ฐ์ฒด ํ์
๋ฐฐ์ด์ ์ ๋ ฌํ ๋๋ 2 ๋ฒ์งธ ์ธ์์ ์๋ Comparator(๋น๊ต ์ฐ์ฐ์) ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ
// ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฒด๋ฅผ ๋น๊ตํ ๊ธฐ์ค์ ์ ์ ํด์ค์ผ ํ๋ค.
// sort ํจ์๋ ์ฒซ๋ฒ์งธ ์ธ์์ ๋ฐฐ์ด์ ์ํํ๋ฉฐ ์์๋ค์ ๋น๊ตํ๋๋ฐ, ๋๋ฒ์งธ ์ธ์์ ๊ฐ์ ๋ฐ๋ผ
// ๋น๊ตํ๋ ๋ ์์์ ์๋ฆฌ๋ฅผ ๋ฐ๊ฟ ๊ฒ์ธ์ง ์๋์ง๋ฅผ ๊ฒฐ์ ํ๋ค.
// 2๋ฒ์งธ ์ธ์๊ฐ ์์์ด๋ฉด ๋์ ์๋ฆฌ๋ฅผ ๋ฐ๊พผ๋ค. ์์์ด๋ฉด ๋ฐ๊พธ์ง ์๋๋ค.
// Integer.compare ํจ์๋ ๋ ์ธ์์ ์ฐจ๋ฅผ ๋ฐํํ๋ค. ๋ฐ๋ผ์ ์ ์๊ฐ ํฌ๋ฉด + ๋ฐํ, ํ์๊ฐ ํฌ๋ฉด ์์ ๋ฐํ์ด๋ค.
// ์ด๋ ๊ฒ ๋๋ฉด ํฐ ์๋ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ชฐ๋ฆฌ๋ฏ๋ก ์๋์ผ๋ก ์ค๋ฆ์ฐจ์์ด ๋๋ค.
Arrays.sort(student, new Comparator<Student>() {
@Override
public int compare(Student c1, Student c2) {
return Integer.compare(c2.score, c1.score);
}
});
// Arrays.sort(student, (c1, c2) -> Integer.compare(c1.score, c2.score()));
int grade = 0; // ์์๋ฅผ ๋ด๋ ๊ทธ๋ฆ
for (int i=0; i<N; i++) {
if (student[i].k != K) continue; // ์
๋ ฅ๋ฐ์ ํ์๋ฒํธ์ ๋์ผํ ๋ฒํธ์ ํ์์ ์์๋ฅผ ์ฐพ์ grade์ ์ง์ด๋ฃ์
// k๋ ํ์๋ฒํธ์ด๊ณ , i๋ ๋ฐฐ์ด์ด ์ ๋ ฌ ๋์๊ธฐ์ ์์์.
grade = i;
break;
}
System.out.println("grade = " + grade);
System.out.println("grade/(N/10) = " + grade/(N/10));
//grade/(N/10)์ผ๋ก ๋๋๋ ๊ฒ์ ํด๋น ํ์์ด 1๋ฐฐ์ ์ฆ ์ด์์ด 10๋ช
์ผ ๊ฒฝ์ฐ ๋ญํฌ๊ฐ ์ด๋์ง ์์๋ด๊ธฐ ์ํ ๊ฒ์ด๋ค.
//grade/(N/10) = 0.5 ํน์ 1์ด 1๋ฑ์ผ๋ก ๋ถ๋ฅ ๋๋ฏ๋ก, 20๋ช
์ค์ 15๋ฑ๋ถํฐ 16๋ฑ์ 8๋ฑ์ผ๋ก ๋ถ๋ฅ๋๋ค.
System.out.println("#" + test_case + " " + credit[grade/(N/10)]);
}
}
}
class Student
{
int k;
int score;
}
ํด๋์ค๋ฅผ ์ด์ฉํ์ฌ 2๊ฐ์ง ์ ๋ณด๋ฅผ ํ๋ฒ์ ๋ด์๋ค. ์ด๋ ๊น์ง ๋ฐฑ์ค์ ํ๋ฉด์ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์๊ฐ์ ํด๋ณด์ง ๋ชปํ๋๋ฐ, ์ง๊ธ๋ถํฐ ํด๋ด์ผ๊ฒ ๋ค.
3. ์๋กญ๊ฒ ๋ฐฐ์ด ๊ฒ
(1) Arrays.sort(๋ฐฐ์ด์ด๋ฆ, Comparator ์ธํฐํ์ด์ค ๊ตฌํ)
Arrays.sort(student, new Comparator<Student>() {
@Override
public int compare(Student c1, Student c2) {
return Integer.compare(c2.score, c1.score);
}
});
// Arrays.sort(student, (c1, c2) -> Integer.compare(c1.score, c2.score()));
Arrays.sort๋ ์์ ํ์ ๋ฐฐ์ด์ ๋ํด์๋ default๋ก ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ฃผ๋ ํจ์์ด๋ค.
๋ง์ฝ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ด ํ์ํ๋ค๋ฉด ๋ ๋ฒ์งธ ์ธ์๋ก Collections.reverseOrder()๋ฅผ ์ ์ด์ฃผ๋ฉด ๋๋ค.
ํ์ง๋ง Arrays.sort๋ก ๊ฐ์ฒด ๋ฐฐ์ด์ ์ ๋ ฌํ ๋๋ ๋ฌธ์ ๊ฐ ๋๋ค. ๋ฌด์์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด์ผํ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋๋ ๋ ๋ฒ์งธ ์ธ์๋ก Comparator ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ ํด์ฃผ๋ฉด ๋๋ค.
Comparator๋ ์ถ์ํ ๋งค์๋ compare๋ง ๊ตฌ์ฒดํ ํด์ฃผ๋ฉด ๊ตฌํ์ด ๋๋๋ค.
compare ๋งค์๋๋ ์ธ์๋ฅผ 2๊ฐ ๋ฐ๋๋ค.
์ฌ์ค sort ํจ์๊ฐ default๋ก ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ฆฌํด์ฃผ๋ ๊ฒ๋ ๋ ๋ฒ์งธ์ธ์๋ก ๋น๊ต๋๋ ๋ ์์๋ผ๋ฆฌ์ ์ฐจ๋ฅผ default๋ก ๋ฐ๊ธฐ ๋๋ฌธ์ด๋ค. ์ ์ - ํ์์ ๊ฐ์ด ๋ค์ด๊ฐ๊ณ ํด๋น ๊ฐ์ด ์์ ์ด๋ฉด ๋ ์์์ ์๋ฆฌ๋ฅผ ๋ฐ๊พธ๊ณ , ์๋๋ฉด ๊ทธ๋๋ก ๋๋๋ค.
์ด๊ฒ ๋ฐ๋ณต๋๋ฉด ์์ฐ์ค๋ฌ ํฐ ๊ฐ๋ค์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ชฐ๋ฆฌ๊ฒ ๋๋ค.
์ฐ๋ฆฌ๋ compare ๋งค์๋๊ฐ ์ด๋ค ๊ธฐ์ค์ ํตํด ์์์ ์์๋ฅผ ๋ฐํํ๋๋ก ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค.
์์ ํจ์์์๋ student ๊ฐ์ฒด์ score ๊ฐ ์ฐจ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์์ ์์๋ฅผ ๋ฐํํด์ฃผ์๋ค.
return์ ์ฐ์ธ Integer.Compare๋ ์ผ์ชฝ์ด ํฌ๋ฉด +1, ์ค๋ฅธ์ชฝ์ด ํฌ๋ฉด -1, ๊ฐ์ผ๋ฉด 0์ ๋ฐํํ๋ค.