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;
	}

}