[백준Java]BOJ1431_시리얼번호

Jcy·2022년 3월 27일
0

알고리즘

목록 보기
2/8

(출처 : https://www.acmicpc.net/problem/1431)

풀면서 어려웠던 점
  • 오랜만에 comparator 정렬을 쓰려니 헷갈리고 어려웠다.

compare 내에서 return -1을 하면 오름차순, return 1을 하면 내림차순으로 정렬이 된다.
o1 - o2 < 0 일 때, o2가 더 큰 값이면 음수가 나와서 내림차순.. 이런 식으로 이해했다. 그리고 정렬하는 코드를 작성할 때
if(o1.length()<o2.length()) return -1; //길이가 짧은 순
else if(o1.length()>o2.length()) return 1;
else { //길이가 같다면
}

이런식으로 썼는데 이렇게 하면 분기를 3번으로 나눠야 하는데

if(o1.length()==o2.length())
else{
}

이렇게 하면 if-else문 하나로 케이스를 나눌 수 있어서 좋은 것 같다.



작성코드

public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		ArrayList<String> arr = new ArrayList<>();

		for (int i = 0; i < n; i++) {
			arr.add(sc.next());
		}

		Collections.sort(arr, new Comparator<String>() {
			@Override
			public int compare(String o1, String o2) {
				if(o1.length()<o2.length()) return -1; //길이가 짧은 순
				else if(o1.length()>o2.length()) return 1;
				else { //길이가 같다면
					int sum1 = 0;
					int sum2 = 0;
					for(int i=0;i<o1.length();i++) {
						if(o1.charAt(i)>='0' && o1.charAt(i)<='9')sum1+=(o1.charAt(i)-'0');
						if(o2.charAt(i)>='0' && o2.charAt(i)<='9')sum2+=(o2.charAt(i)-'0');
					}
					if(sum1==sum2)return o1.compareTo(o2);
					else {
						return Integer.compare(sum1, sum2);
					}
				}
			}
		});
		for(String i : arr)System.out.println(i);
	}
profile
꾸준하게라도 써보겠읍니다..

0개의 댓글

관련 채용 정보