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


import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
class Solution {
public String solution(String s) {
ArrayList<Character> list = new ArrayList<>();
for (char c : s.toCharArray()) {
list.add(c);
}
Collections.sort(list);
Map<Character, Integer> map = new HashMap<>();
for (char c : list) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
StringBuilder sb = new StringBuilder();
for (char c : list) {
if (map.get(c) == 1) {
sb.append(c);
}
}
return sb.toString();
}
}
문자열 중 문자 빈도수를 계산하기 위해 HashMap을 이용하였고, 사전적 정렬된 상태로 출력하기 위해 ArrayList의 sort를 이용.
Map<Character, Integer> map = new HashMap<>(); : 각 문자의 등장 빈도를 저장하기 위해 HashMap 객체 map 을 생성. 여기서 Character는 문자를, Integer는 해당 문자와 빈도를 나타냄
for (char c : list) { map.put(c, map.getOrDefault(c, 0) + 1) } : 정렬된 리시트 list를 순회하며 각 문자 c 가 map에 존재하는지 확인. 이미 존재한다면, 기존 값에 1을 더하고, 존재하지 않는다면 기본값 0에 1을 더하여 map에 저장
StringBuilder sb = new StringBuilder(); : 한번만 등장하는 문자들을 저장하기 위한 StringBuilder 객체 sb 를 생성. StringBuilder 는 문자열을 효율적으로 추가하고 수정할 수 있는 클래스.
for (char c : list) { if (map.get(c) == 1) } : 정렬된 리스트 list를 순회하며 각 문자 c 의 빈도를 map에서 확인. 빈도가 1인 경우 map.get(c) == 1 해당문자 c를 sb에 추가