달리는 두딘

[입문] 한 번만 등장한 문자 본문

코딩 테스트/프로그래머스

[입문] 한 번만 등장한 문자

디두딘 2022. 10. 20. 15:38

문제 설명

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


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

입출력 예

s result
"abcabcadc" "d"
"abdc" "abcd"
"hello" "eho"

입출력 예 설명

입출력 예 #1

  • "abcabcadc"에서 하나만 등장하는 문자는 "d"입니다.

입출력 예 #2

  • "abdc"에서 모든 문자가 한 번씩 등장하므로 사전 순으로 정렬한 "abcd"를 return 합니다.

입출력 예 #3

  • "hello"에서 한 번씩 등장한 문자는 "heo"이고 이를 사전 순으로 정렬한 "eho"를 return 합니다.

내 코드 풀이

import java.util.*;
import java.util.stream.Collectors;

class Solution {
    public String solution(String s) {
        String str = "";
        int cnt = 1;
        List<String> list = new ArrayList<>();
        Map<String, Integer> map = new HashMap<>();
        
    	String[] arr = s.split(""); // 문자열 하나씩 자르기
        
        // 사전순 정렬
        list = Arrays.stream(arr).sorted().collect(Collectors.toList()); 
        s = String.join("", list); // 정렬 후 합치기
        
    	// indexoutofboundsexception 방지
        for (int i = 1; i < list.size(); i++) { 
            str = list.get(i - 1); 

            if (str.equals(list.get(i))) { // 문자열 순차 비교
                cnt++; // 순차 비교 후 전후 문자열이 같다면 cnt++
                map.put(str, cnt); // a, 3
                cnt = 1; // cnt 초기화
            }

            for (String key : map.keySet()) { // map 반복문
                if (list.contains(key)) { // list에 key 포함한다면
                    s = s.replaceAll(key, ""); // 중복 문자열 제거
                }
            }
        }
        return s;
    }
}

느낀 점

난 진짜 바보인가