| 문제 | 레벨 | 정답률 |
|---|---|---|
| 문자열 내림차순으로 배치하기 | Lv.1 | 82% |
문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
import java.util.*;
class Solution {
public String solution(String s) {
String answer = "";
PriorityQueue<Character> queueS = new PriorityQueue<>(Comparator.reverseOrder());
for(int i = 0; i<s.length(); i++){
queueS.add(s.charAt(i));
}
for(int i = 0; i<s.length(); i++){
answer += queueS.poll();
}
return answer;
}
}
사실 문제 자체는 너무 쉽다. 그런데 문제를 보자마자 전에 정리했던 우선순위 큐를 써봐야겠다는 생각이 들어서 우선순위 큐를 사용하여 간단하게 풀이해보았다.
다른 사람들의 풀이를 보니 생각보다 큐를 사용을 잘 안하더라고.
우선 주어진 문제에서는 알파벳을 내림차순 해야한다.
그러나 우선순위 큐에서는 기본적으로 올림차순이다.
즉, 작은 수가 먼저 poll된다. 그러므로 이 우선순위를 바꿔줘야 한다.
PriorityQueue<Character> queueS = new PriorityQueue<>(Comparator.reverseOrder());
우선순위 큐 기본 생성 코드에서 (Comparator.reverseOrder())만 추가해주면 된다.
말 그대로 우선순위를 reverse한다는 것.
이렇게 우선순위를 뒤집어서 생성한 후, 주어진 문자열에서 각 문자들을 넣고, 순서대로 poll해서 answer에 넣어주었다.
그럼 자동으로 내림차순 정렬되어 나온다.
originalString.concat(appendString)originalString.substring(originalString.length() - 1);originalString.charAt(originalString.length()-1);