문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.
Map이 가지고 있는 key를 set 형태로 모두 반환하는 keySet() 대신 getKey()와 getValue() 메서드를 사용하기 위해 Map.Entry를 사용했다. Map 객체가 가지고 있는 메서드 중 entrySet()을 이용해 key와 value를 하나의 쌍으로 갖는 Map.Entry 객체를 반환 받고, 이때 값이 1이면 한 번 등장했다는 것이므로 StringBuffer 객체에 append() 한다. 이때 추가 대상은 key가 된다.
그리고 문제에 따라 한 번만 등장한 문자열이 없어 answer.toString()이 없을 경우 빈 문자열을 리턴하고, 그렇지 않을 경우에는 Array.sort()로 오름차순 정렬한 다음 반환했다. 이때, String 타입에서는 정렬이 되지 않으니 toCharArray()로 문자형 배열을 만든 뒤 정렬을 수행해 주었다.
getOrDefault() 메서드가 참 유용하다는 생각!
import java.util.Map;
import java.util.HashMap;
import java.util.Arrays;
class Solution {
public String solution(String s) {
StringBuffer answer = new StringBuffer();
String[] sArr = s.split("");
Map<String,Integer> sMap = new HashMap<>();
for(int i=0; i<sArr.length; i++){
sMap.put(sArr[i], sMap.getOrDefault(sArr[i], 0) + 1);
}
for(Map.Entry<String, Integer> entry : sMap.entrySet()){
if(entry.getValue() == 1){
answer.append(entry.getKey());
}
}
if(answer.toString().equals("")){
return "";
}else{
char[] chars = answer.toString().toCharArray();
Arrays.sort(chars);
return new String(chars);
}
}
}
