프로그래머스 12917번
https://school.programmers.co.kr/learn/courses/30/lessons/12917
사실 이 문제 너무 쉬워서 블로그에 글 안쓰려고 했는데,
요즘 어려운 문제만 풀어서 그런가 문제가 이렇게 쉽다고(?) 혼자 부정하는 바람에 고민을 했다.
문제 이해를 잘못했다.
예를 들어서 "Zzbcdefg"
이런 문자가 있으면 정렬했을 때, "gfedcbZz"
이렇게 같은 알파벳의 경우 대문자가 소문자보다 먼저 오도록 정렬을 하라는 문제인 줄 알았다....
근데 알고보니 그냥 내림차순으로 정렬만 하면 되는 문제...
그래도 고민을 해봤는데, 의외로 저 대문자를 앞으로 오도록 하는 정렬을 내가 스스로 못하고 있는게 너무 큰 문제... 그래서 구현 내용을 기록을 좀 해야겠다...
만약에 "gfedcbZz"
이런식으로 대문자가 앞으로 오도록 내림차순 정렬을 해야 할 때
// ex -> "Zzbcdefg"
Character[] chars = new Character[s.length()];
for (int i = 0; i < s.length(); i++) {
chars[i] = s.charAt(i);
}
// Comparator를 사용하여 정렬 조건을 정의
Arrays.sort(chars, new Comparator<Character>() {
@Override
public int compare(Character c1, Character c2) {
// 소문자로 변환하여 비교하되, 원래의 대소문자 순서를 유지
int comp = Character.toLowerCase(c2) - Character.toLowerCase(c1);
if (comp == 0) { // 알파벳이 같은 경우 원래의 대문자가 소문자보다 앞으로 오도록
return c2 - c1;
}
return comp;
}
});
// 출력 -> "gfedcbZz"
이런식으로 문자를 소문자로 만들어서 같은 문자일 경우, 기존의 문자중 대문자가 앞으로 오도록 만들어준다.
import java.util.*;
class Solution {
public String solution(String s) {
Character[] chArr = new Character[s.length()];
for (int i = 0; i < s.length(); i++) {
chArr[i] = s.charAt(i);
}
Arrays.sort(chArr, new Comparator<Character>() {
@Override
public int compare(Character o1, Character o2) {
// 내림차순 정렬, 대문자는 소문자보다 작게 간주
return o2 - o1;
}
});
StringBuilder sb = new StringBuilder();
for(char ch : chArr) {
sb.append(ch);
}
return sb.toString();
} // End of solution()
} // End of Solution class