Algorithm/Programmers

[Programmers] Lv.0 / 한 번만 등장한 문자 / Java

unknownomad 2024. 6. 20. 07:20

문제

 

풀이

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

class Solution {
    public String solution(String s) {
        return s.chars() // 문자열 -> 스트림으로 변환(각 문자 정수값으로 매핑)
            .mapToObj(c -> (char) c) // 각 정수값 -> 문자로 변환
            /* 
            * collect()로 스트림 그룹화
            * groupingBy()로 문자 그룹화
            * counting()으로 각 그룹 요소 수 세어 맵에 저장
            * LinkedHashMap: 입력 순서 유지
            */
            .collect(Collectors.groupingBy(c -> c, LinkedHashMap::new, Collectors.counting()))
            .entrySet().stream() // 맵의 엔트리 -> 스트림으로 변환
            .filter(e -> e.getValue() == 1L) // 등장 횟수가 1인 문자 필터링
            .map(e -> String.valueOf(e.getKey())) // 각 문자 -> 문자열로 변환
            .sorted() // 알파벳순 정렬
            .collect(Collectors.joining()); // 정렬된 문자들을 하나의 문자열로 결합
    }
}
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(); 
    }
}

 

출처

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