Algorithm/정렬(Sort)
[백준 1431번] 시리얼 번호(Java 풀이)
agility
2020. 3. 2. 21:56
백준알고리즘 1431번 : 시리얼 번호
주어진 3가지 조건대로 시리얼번호를 정렬해주면 된다.
1. String.length()를 compareTo method내에 첫번째 조건으로 집어넣는다.
2. 1번의 조건에서 비교불가한 것은, string의 character값을 하나씩 불러와서
그 byte 값이 (byte)'0'보다 크고, (byte)'9'보다 작거나 같은 것들만 더해주어 비교한다.
3. 2번의 조건에서 비교불가한 것은, 각 character별로 하나씩 비교해준다.
소스 ▽
더보기
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = Integer.parseInt(sc.nextLine());
ArrayList<sort> arr = new ArrayList<sort>();
for (int i = 0; i < num; i++) {
sort srt = new sort();
srt.str = sc.nextLine();
arr.add(srt);
}
arr.sort(Comparator.reverseOrder());
for (sort sort : arr) {
System.out.println(sort.str);
}
}
}
class sort implements Comparable<sort> {
String str;
@Override
public int compareTo(sort o) {
if (str.length() < o.str.length()) {
return 1;
} else if (str.length() > o.str.length()) {
return -1;
} else {
int sum1 = 0;
int sum2 = 0;
for (int i = 0; i < str.length(); i++) {
if ((byte) str.charAt(i) >= (byte) '0' && (byte) str.charAt(i) <= (byte) '9') {
sum1 += str.charAt(i)-'0';
}
if ((byte) o.str.charAt(i) >= (byte) '0' && (byte) o.str.charAt(i) <= (byte) '9') {
sum2 += o.str.charAt(i)-'0';
}
}
if (sum1 < sum2) {
return 1;
} else if (sum1 > sum2) {
return -1;
} else {
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) < o.str.charAt(i)) {
return 1;
} else if (str.charAt(i) > o.str.charAt(i)) {
return -1;
}
}
}
}
return 0;
}
}