본문 바로가기

Algorithm/Programers - Java

[프로그래머스(Java)] 한 번만 등장한 문자 / Collectors.groupingBy(), Collectors.joining()

 

Level. 0

 

문제

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

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

 

풀이

import java.util.Map;
import java.util.TreeMap; // Key를 기준으로 자동정렬

class Solution {
    public String solution(String s) {
        String answer = "";
        Map<Character,Integer> m = new TreeMap<>();
        for(int i=0 ; i< s.length(); i++){
            m.put(s.charAt(i),m.getOrDefault(s.charAt(i),0)+1);  
        }       

        for (Character key : m.keySet()) {
            if(m.get(key)==1) answer += key;
        }
        
        return answer;
    }
}

 


다른 풀이

import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

class Solution {
    public String solution(String s) {
        return Arrays.stream(s.split(""))
                .collect(Collectors.groupingBy(s1 -> s1))
                .entrySet()
                .stream()
                .filter(entry -> entry.getValue().size() <= 1)
                .map(Map.Entry::getKey)
                .sorted()
                .collect(Collectors.joining());
    }
}

 

collect()

  • Stream의 데이터를 변형 등의 처리를 하고 원하는 자료형으로 변환해준다.

 

Collectors.groupingBy()

  • groupingBy를 이용하면 데이터 집합을 하나 이상의 특성으로 분류, 그룹화하는 연산을 쉽게 수행할 수 있다.
  • groupingBy는 특정 속성값에 의해서 그룹핑을 짓는 것이며, 결과값으로 항상 Map<K, V>을 반환한다. 

 

 


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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr