흥미/코딩테스트

😊 #14 프로그래머스 - 한 번만 등장한 문자

RadderNepa 2023. 2. 25. 01:58

[문제]

출처 : https://school.programmers.co.kr


[해설]

- 나의 풀이이다. 처음부터 아래와 같이 깔끔하게 푼건 아니다.

- 필요없는 변수 선언, 정렬 등 더러운 코드가 많았는데 정답 후에 필요없는 부분을 제거하다보니 아래와 같이 됐다.

import java.util.List;
import java.util.ArrayList;
import java.util.Collections;

class Solution {
    public String solution(String s) {
        List<String> list = new ArrayList<String>();
        while(s.length() > 0) {
            String one = String.valueOf(s.charAt(0));           
            String tmp = s.replaceAll(one, "");
            int sub = s.length() - tmp.length();
            if(sub == 1) list.add(one);
            s = tmp;
        }
        // 정렬은 아래 2개중 아무거나 사용해도 된다.
        list.sort(String::compareTo);
        // Collections.sort(list, (s1, s2) -> s1.compareTo(s2));
        String answer = "";
        for(String ss : list) answer += ss;
        return answer;
    }
}

- 성능이 그렇게 좋지는 않다.

 

- 다른이의 풀이 중 눈여겨 볼만한 건 아래였는데 개인적으로 이 문제를 이렇게까지 풀 필요가 있었나 싶다.

- 너무 과한 느낌이고 성능도 좋지 않았다.

- 다른 어려운 문제 풀이를 위해 연습하는 거라면 그것에 의의가 있겠다.

import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

class Solution {
    public String solution(String s) {
        return 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());
    }
}

 

 

cf) 아래 글을 읽어보자

2022.10.19 - [JAVA/Java8] - #30 Advanced Stream - Grouping By

 

#30 Advanced Stream - Grouping By

● 도입 public static Collector groupingBy(Function

radderveloper.tistory.com