반응형
순서가 좀 바뀌었지만 풀긴 먼저 풀었었다. 여러 방식으로 풀어보느라 정리를 미뤄놨던 터라
분류: 정렬
▶문제
▶sort로 정렬 Comparator
//백준알고리즘 제출시 클래스 이름은 Main으로 바꿔야 됨
package sort;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class p10814 {
//나이순 정렬
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[][] arr = new String[n][2];
for(int i=0; i<n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
arr[i][0] = st.nextToken();
arr[i][1] = st.nextToken();
}
Arrays.sort(arr, (e1, e2)->{
if(Integer.parseInt(e1[0])==Integer.parseInt(e2[0])) {
return 0;
}
else {
return Integer.parseInt(e1[0])-Integer.parseInt(e2[0]);
}
});
StringBuilder sb = new StringBuilder();
for(int i=0; i<n; i++) {
sb.append(arr[i][0]+" "+arr[i][1]+"\n");
}
System.out.print(sb);
//comparator 인터페이스 compare메소드 람다식 안쓰고 오버라이드 하기
Arrays.sort(arr, new Comparator<String[]>(){
@Override
public int compare(String[] s1, String[] s2) {
return Integer.parseInt(s1[0])-Integer.parseInt(s2[0]);
}
});
StringBuilder sb_1 = new StringBuilder();
for(int i=0; i<n; i++) {
sb_1.append(arr[i][0]+" "+arr[i][1]+"\n");
}
System.out.print(sb_1);
}
}
▶comparator인터페이스를 이용해서 풀었다. 람다식으로도 풀어봄
▶person객체 자체 정렬 Comparable
package sort;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;
public class p10814_1 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
ArrayList<Person> list = new ArrayList<Person>();
for(int i=0; i<n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
list.add(new Person(Integer.parseInt(st.nextToken()), st.nextToken()));
}
Collections.sort(list);
StringBuilder sb = new StringBuilder();
for(int i=0; i<n; i++) {
sb.append(list.get(i).age+" "+list.get(i).name+"\n");
}System.out.println(sb);
}
public static class Person implements Comparable<Person>{
int age;
String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public int compareTo(Person p) {
if(this.age >= p.age) return 1;
else return -1;
}
}
}
▶위 방식 다시 정리하면서 person 객체에 toString()메소드 추가
package sort;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class p10814_2 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Person[] p = new Person[n];
for(int i=0; i<n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
p[i]=new Person(Integer.parseInt(st.nextToken()), st.nextToken());
}
Arrays.sort(p);
StringBuilder sb = new StringBuilder();
for(int i=0; i<n; i++) {
sb.append(p[i].age+" "+p[i].name+"\n");
}System.out.println(sb);
//두번째 출력방법 toSting으로
for(int i=0; i<n; i++) {
System.out.println(p[i]);//객체를 출력하면 자동으로 toString메소드 호출돼서 출력됨
}
}
public static class Person implements Comparable<Person>{
int age;
String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public int compareTo(Person p) {
if(this.age >= p.age) return 1;
else return -1;
//혹은 한줄로 =return this.age-p.age;
}
public String toString() {
return this.age+" "+this.name;
}
}
}
▶객체를 그냥 출력하면 toString()메소드가 호출돼 지정된 문자열이 출력된다.
채점결과
링크 www.acmicpc.net/problem/10814
10814번: 나이순 정렬
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을
www.acmicpc.net
참고한 여러 블로그들....
rian-yeji.github.io/study/java/2019/11/10/java-remove-overlap.html
gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html
반응형
'백준알고리즘' 카테고리의 다른 글
백준알고리즘:p9663 N-Queen (0) | 2021.04.09 |
---|---|
백준알고리즘:p18870 좌표압축 (0) | 2021.04.08 |
백준알고리즘: p15649~15652 N과 M(1, 2, 3, 4) (0) | 2021.04.08 |
알고리즘 백트래킹(backtracking) (0) | 2021.04.08 |
백준알고리즘:p1181 단어정렬 (0) | 2021.04.07 |
댓글