[프로그래머스/Java] Lv.0 한 번만 등장한 문자

febCho·2024년 4월 26일
0

코딩테스트

목록 보기
183/253
post-thumbnail

문제

문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.

- 제한사항

  • 0 < s의 길이 < 1,000
  • s는 소문자로만 이루어져 있습니다.

풀이

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);
        }
    }
}

결과

profile
Done is better than perfect.

0개의 댓글