
C언어는 구조체를 만들면 되고 자바는 class를 하나 만들어서 비교하면 된다.
새로 배운 부분은 사용자 정의 class 배열을 비교할 수 있다는 점이다. 단, 사용자가 comparable 클래스를 상속해서 compareTo함수를 오버라이딩하고 재정의해주어야 한다.
1. Member 클래스
Member 클래스는 3개의 필드를 가진다. 나이, 이름 그리고 입력받은 순서(n)이다. 변수명을 뭘로할까 하다가 그냥 단순하게 n으로 주었다.
Member클래스 안에 새로운 정렬 방식을 compareTo에 정의했다.

기존의 compareTo 메서드와 리턴값이 같게 조건을 주었다.
public class Member implements Comparable<Member>{
// .. 생략
@Override
public int compareTo(Member o) {
if(age == o.age) // 나이가 같으면
return n - o.n;
return age - o.age;
}
}
2. Main 클래스
Main 클래스에서 특별히 정의할 건 없다. 주의해서 입력받고, Member클래스에서 compareTo를 정의했으므로 정렬코드도 단순하다. 단, 어떤 방식으로 정렬이 되는지 명확하게 기억해야겠다..
Arrays.sort(members);
아래는 전체 코드이다.
public class Member implements Comparable<Member>{
int n;
int age;
String name;
public Member() {
}
public Member(int n, int age, String name) {
this.n = n;
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
@Override
public int compareTo(Member o) {
if(age == o.age) // 나이가 같으면
return n - o.n;
return age - o.age;
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BOJ10814 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N, age, i;
String str, name;
StringTokenizer st;
// member클래스 정의
N = Integer.parseInt(br.readLine());
Member[] members = new Member[N];
// 입력받기
for(i=0;i<N;i++){
str = br.readLine();
st = new StringTokenizer(str);
age = Integer.parseInt(st.nextToken());
name = st.nextToken();
members[i] = new Member(i, age, name);
}
// 정렬하기, 나이 어린 순 -> 같으면 입력받은 순
Arrays.sort(members);
// 출력하기
for(i=0;i<N;i++){
System.out.println(members[i].getAge() + " " + members[i].getName());
}
}
}
여러 클래스를 백준에 제출하는 경우, main을 제외한 클래스에 public을 지우면 된다고 한다.
'코딩가딩가' 카테고리의 다른 글
| [JAVA]BOJ 1302, 베스트셀러 (0) | 2024.07.25 |
|---|---|
| [JAVA]BOJ 7785, 회사에 있는 사람 (0) | 2024.07.25 |
| [JAVA]BOJ 1181, 단어 정렬 (1) | 2024.07.24 |
| [JAVA]BOJ 2840, 행운의 바퀴 (0) | 2024.07.21 |
| [JAVA]BOJ 10250, ACM 호텔 (0) | 2024.07.17 |