알고리즘 문제풀이/백준

#1431 : 시리얼 번호

모항 2022. 3. 5. 16:37

풀이방법

사용된 것:

Comparator 오버라이딩

 

2022.03.05

문제에서 제시하는 기준에 맞게 정렬하는 Comparator를 정의하여 사용해주면 된다.

이 때, str1.compareTo(str2);를 사용하였는데,

이 함수는 str1이 사전순으로 str2보다 앞설 때는 음수를, 그렇지 않을 때는 양수를 리턴한다.

 

코드

Java(2022.03.05)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;

public class Main {

	static int n;	//기타 개수
	static String[] serials;	//시리얼번호들의 배열
	static StringBuilder sb;
	
	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		
		Comparator<String> cp = new Comparator<String>() {

			@Override
			public int compare(String str1, String str2) {
				// TODO Auto-generated method stub
				
				if(str1.length()<str2.length()) return -1;
				else if(str1.length() == str2.length()) {
					if(add(str1) < add(str2)) return -1;
					else if(add(str1) == add(str2)) {
						return str1.compareTo(str2);
					}
					else return 1;
				}
				else return 1;
				
			}
			
		};
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		n = Integer.parseInt(br.readLine());
		serials = new String[n];
		for(int i = 0; i<n; i++) {
			serials[i] = br.readLine();
		}
		Arrays.sort(serials, cp);
		
		sb = new StringBuilder();
		for(int i = 0; i<n; i++) {
			sb.append(serials[i] + System.lineSeparator());
		}
		
		System.out.print(sb);

	}
	
	static int add(String str) {
		int sum = 0;
		for(int i = 0; i<str.length(); i++) {
			char c = str.charAt(i);
			if(c>= '0' && c <= '9') {
				sum += c-'0';
			}
		}
		return sum;
	}

}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

#3273 : 두 수의 합  (0) 2022.03.05
#2003 : 수들의 합 2  (0) 2022.03.05
#3190 : 뱀  (0) 2022.03.02
#2607 : 비슷한 단어  (0) 2022.03.02
#9012 : 괄호  (0) 2022.03.02