Blog

한 번만 등장한 문자

문제 #

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

  • 제한사항
    • 0 < s의 길이 < 1,000
    • s는 소문자로만 이루어져 있습니다.
  • 입출력 예
    s result
    “abcabcadc” “d”
    “abdc” “abcd”
    “hello” “eho”

나의 풀이 #

import java.util.*;

class Solution {
    public String solution(String s) {
        String[] strArr = s.split("");
        Arrays.sort(strArr);
        String str = String.join("",strArr);
	       
				// 사전 순으로 정리된 값을 순서대로 비교 후 같을경우 문자열에서 삭제한다.
        for(int i = 0; i<strArr.length-1; i++) {
            if(strArr[i].equals(strArr[i+1])){
                str=str.replace(strArr[i],"");
            }
        }
        
        return str;
    }
}

다른 사람의 풀이 #

// 알파벳별로 나타난 횟수를 카운트 한 후 횟수가 1인 알파벳을 answer에 추가하는 방식
class Solution {
    public String solution(String s) {
        int[] alpha = new int[26];
        for(char c : s.toCharArray()){
            alpha[c - 'a']++;
        }

        StringBuilder answer = new StringBuilder();
        for(int i = 0; i < 26; i++){
            if(alpha[i] == 1){
                answer.append((char)(i + 'a'));
            }
        }
        return answer.toString();
    }
}
  • 나의 풀이 보다 더 빠른처리가 가능함.
//n번째 알파벳을 지우기전,후의 길이차가 1일경우 중복이 아님을 이용
import java.util.*;

class Solution {
    public String solution(String s) {

        HashSet<String> set = new HashSet<>();

        for (int i = 0; i < s.length(); i++) {
            String replace = s.replace(s.charAt(i) + "", "");
            if(s.length() - replace.length() == 1){
                set.add(s.charAt(i)+"");
            }
        }
        ArrayList<String> list = new ArrayList<>(set);
        Collections.sort(list);
        return String.join("", list);
    }
}
  • 의문점 : 중복이 일어나지 않고 TreeSet을 사용하지도 않지만 set.add한 후 list형변환 후 Collection.sort(list)의 형태로 오름차순 정렬하였다.
    • list만 사용시 5~10ms의처리시간, TreeSet사용시 6~8ms의 처리시간, HashSet사용시 6~9ms의 처리시간
    • HashSet대신 List에 바로 저장하여도 테스트에 통과하였다. > 처리시간때문인듯 함
    • TreeSet에 저장하여 join하여도 테스트에 통과하였다.

관련개념 학습 #

  • 관련 개념을 찾아서 공부한 내용을 적는다.
  • ctrl + p로 내가 필기한 내용 중에서 관련내용이 있는지 찾아서 그 페이지의 링크를 복사하여 붙혀넣는다.
  • 필기 페이지에도 이 문제의 링크를 복사하여 “관련 문제"라고 써놓고 붙혀넣는다.