코딩 테스트 풀이 14 - 한 번만 등장한 문자

배효림·2023년 3월 27일
0

코딩테스트

목록 보기
14/20

✔ 문제

https://school.programmers.co.kr/learn/courses/30/lessons/120896?language=java

💡 접근 방법

HashTable 을 써서 각 문자가 몇번 나오는지 저장한후, 해당 HashTable 을 iterate 하며 등장한 횟수가 1일 경우 StringBuilder 에 append 했다. 마지막으로 결과 String을 char[] 로 변환한 뒤 sort 한 후, String으로 재변환하여 리턴하였다.

⭐ 코드

	public String solution(String s)
    {
        Hashtable<String,Integer> ht =  new Hashtable<>();
        String[] strArr = s.split("");
        for (String str : strArr)
        {
            ht.merge(str,1,Integer::sum);
        }

        StringBuilder sb = new StringBuilder();

        for (String str : ht.keySet())
        {
            if (ht.get(str) == 1)
            {
                sb.append(str);
            }
        }

        char[] charArr = sb.toString().toCharArray();
        Arrays.sort(charArr);

        return new String(charArr);
    }

💻 더 나은 코드 ?

일단 해시 테이블을 한번 사용해보고 싶어서 사용해서 풀었지만, Map이 더 빠르므로 Map으로 하는게 더 좋았을 것 같다. 추가적으로, 다른 사람의 코드를 살펴보다가, Stream 으로 아주!! 깔끔하게 하신 분의 코드를 봤는데 groupingBy의 사용을 이렇게 하는 거구나 싶었다.

Arrays.stream(s.split(""))
                .collect(Collectors.groupingBy(s1 -> s1))
                .entrySet()
                .stream()
                .filter(entry -> entry.getValue().size() <= 1)
                .map(Map.Entry::getKey)
                .sorted()
                .collect(Collectors.joining());
profile
항상 위를 바라보는 프로그래머

0개의 댓글