프로그래머스.한 번만 등장한 문자

남궁진 (jinvicky)·2026년 4월 1일

Problem


https://school.programmers.co.kr/learn/courses/30/lessons/120896

Solution


주어진 문자열 s 에서 한번만 등장하는 문자를 사전 순으로 정렬한 문자열을 리턴해야 한다.

사전 순으로 정렬해야 한다고 했을 때 TreeSet을 떠올렸다.
그리고 TreeSet안의 요소들을 StringBuilder로 합치면 좋겠다는 아이디어에서 시작했다.

Error

2번 이상 등장한 문자를 제외해야 하는데 그대로 출력되어 테스트 케이스에서 실패했다.
그래서 순서와 관련이 없이 기존에 등장했는 지 여부를 체크하는 블랙리스트용 HashSet을 선언했다.

set은 add를 실패하면 false를 반환한다. 그래서 add를 실패했다면

  • 블랙리스트에 요소를 추가한다.
  • 기존 TreeSet에 있는 요소도 삭제한다.

그리고 사전에 이미 블랙 리스트에 있다면 더하려는 시도조차 하지 않도록 사전 리턴하게 했다.

if(blacklist.contains(c)) continue;
            
            if(!tSet.add(c)) {
                blacklist.add(c);
                tSet.remove(c);
            }

Code


import java.util.*;
class Solution {
    public String solution(String s) {
        StringBuilder sb = new StringBuilder();
        TreeSet<Character> tSet = new TreeSet<>();
        Set<Character> blacklist = new HashSet<>();
        
        for(char c : s.toCharArray()) {
            if(blacklist.contains(c)) continue;
            
            if(!tSet.add(c)) {
                blacklist.add(c);
                tSet.remove(c);
            }
        }
        
        for(Character c : tSet) {
            sb.append(c);
        }
        
        return sb.toString();
    }
}

TIL


입문용 문제지만 왜 이렇게 풀었고를 설명할 수 있고 맞아서 뿌듯하다.

profile
문제를 차근차근 하나씩 해결하려고 합니다:)

0개의 댓글