[BOJ 10825]国営水-Java
15710 ワード
key points
Solution
この問題は多くの人が解いた問題の一つだ.
大きく分けて2つの方法があります.Comparable
インターフェースを使う人と私のようにComparator
インターフェースを使う人.
前者はcompareTo(T o)法を再定義することによって解くことができ,後者はCompare(T o 1,T o 2)法を再定義することによって解くことができる.
上記の2つのインタフェースには、オブジェクトを比較可能にする共通点があります.
Comparable
Comparator
오름차순
を基準とします.したがって、compare/careToを使用してオブジェクトを比較する場合、負の値が表示されると、比較オブジェクトの前の小さいことを示すため、2つのオブジェクトの位置は変更されません.逆に、正の値が表示されると、前の比較オブジェクトが大きいため、並べ替え時に2つのオブジェクトの位置が変更されます.詳細については、Java[JAVA]-ComparentとCompareatorについてを参照してください.🔥
Code 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));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
String[][] score = new String[N][4];
/* Input */
for (int i = 0; i < N; i++) {
score[i] = br.readLine().split(" ");
}
Arrays.sort(score, new Comparator<String[]>() {
@Override
public int compare(String[] s1, String[] s2) {
if (Integer.parseInt(s1[1]) == Integer.parseInt(s2[1])) {
if (Integer.parseInt(s1[2]) == Integer.parseInt(s2[2])) {
if (Integer.parseInt(s1[3]) == Integer.parseInt(s2[3])) {
//국영수 점수가 모두 같다면 이름의 사전 오름차순
return s1[0].compareTo(s2[0]);
}
//국어 점수와 영어 점수가 같을 때, 수학 점수의 내림차순
return Integer.compare(Integer.parseInt(s2[3]), Integer.parseInt(s1[3]));
}
//국어 점수가 같을 때, 영어 점수의 오름차순
return Integer.compare(Integer.parseInt(s1[2]), Integer.parseInt(s2[2]));
}
//국어 점수의 내림차순
return Integer.compare(Integer.parseInt(s2[1]), Integer.parseInt(s1[1]));
}
});
/* Output */
for (int i = 0; i < N; i++) {
bw.write(score[i][0] + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
Result
2年ぶりに出した問題は感慨深い😂
Reference
この問題について([BOJ 10825]国営水-Java), 我々は、より多くの情報をここで見つけました
https://velog.io/@nari120/BOJ-10825-국영수-Java
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
String[][] score = new String[N][4];
/* Input */
for (int i = 0; i < N; i++) {
score[i] = br.readLine().split(" ");
}
Arrays.sort(score, new Comparator<String[]>() {
@Override
public int compare(String[] s1, String[] s2) {
if (Integer.parseInt(s1[1]) == Integer.parseInt(s2[1])) {
if (Integer.parseInt(s1[2]) == Integer.parseInt(s2[2])) {
if (Integer.parseInt(s1[3]) == Integer.parseInt(s2[3])) {
//국영수 점수가 모두 같다면 이름의 사전 오름차순
return s1[0].compareTo(s2[0]);
}
//국어 점수와 영어 점수가 같을 때, 수학 점수의 내림차순
return Integer.compare(Integer.parseInt(s2[3]), Integer.parseInt(s1[3]));
}
//국어 점수가 같을 때, 영어 점수의 오름차순
return Integer.compare(Integer.parseInt(s1[2]), Integer.parseInt(s2[2]));
}
//국어 점수의 내림차순
return Integer.compare(Integer.parseInt(s2[1]), Integer.parseInt(s1[1]));
}
});
/* Output */
for (int i = 0; i < N; i++) {
bw.write(score[i][0] + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
2年ぶりに出した問題は感慨深い😂
Reference
この問題について([BOJ 10825]国営水-Java), 我々は、より多くの情報をここで見つけました https://velog.io/@nari120/BOJ-10825-국영수-Javaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol