-
[백준 1431번] 시리얼 번호(Java 풀이)Algorithm/정렬(Sort) 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; } }
'Algorithm > 정렬(Sort)' 카테고리의 다른 글
[백준 2470번] 두 용액 (Java 풀이) (0) 2022.04.10 [백준 10816번] 숫자 카드 2(Java 풀이) (0) 2022.04.09 [백준 11656번] 접미사 배열 (Java 풀이) (0) 2020.03.01 [백준 10867번] 중복 빼고 정렬하기(Java 풀이) (0) 2020.02.22 [백준 2822번] 점수 계산(Java 풀이) (0) 2020.02.21