본문 바로가기

Algorithm/Programers - Java

[프로그래머스(Java)] 중복된 문자 제거 / stream.distinct(), LinkedHashSet, String.Join(String, Object[])

 

Level. 0

 

문제

문자열 my_string이 매개변수로 주어집니다. 
my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return 하도록 solution 함수를 완성해 주세요.

* 제한사항
- 1 ≤ my_string ≤ 110
- my_string은 대문자, 소문자, 공백으로 구성되어 있습니다.
- 대문자와 소문자를 구분합니다.
- 공백(" ")도 하나의 문자로 구분합니다.
중복된 문자 중 가장 앞에 있는 문자를 남깁니다.

 

풀이

import java.util.Map;
import java.util.HashMap;

class Solution {
    public String solution(String my_string) {
        String answer = "";
        String[] arr = my_string.split("");
        Map<String, Integer> map = new HashMap<>();
        for(String str : arr){
            if(map.containsKey(str)) continue;
            map.put(str, 0);
            answer += str;
        }
        return answer;
    }
}

 

 

다른 풀이 1 - Stream

import java.util.stream.Collectors;

class Solution {
    public String solution(String my_string) {
        return my_string.chars()
                .mapToObj(Character::toString)
                .distinct()
                .collect(Collectors.joining());
    }
}

 

stream.distinct()

  • distinct() : 스트림에서 중복되는 요소들을 모두 제거해 주고 새로운 스트림을 반환한다. 

 

 

다른풀이 2 - Set

import java.util.*;
class Solution {
    public String solution(String my_string) {
        String[] answer = my_string.split("");
        Set<String> set = new LinkedHashSet<String>(Arrays.asList(answer));

        return String.join("", set);
    }
}

 

중복값을 저장하지 않는 set 자료구조를 사용하였으며, 

그중 저장 순서를 유지하는 LinkedHashSet을 사용한 풀이이다. 

 

 

Set 

1. HashSet

Set<> 객체명 = new HashSet<>();

중복값을 저장하지 않으며, 순서를 보장하지 않는다. 

 

2. TreeSet

Set <> set = new TreeSet<>();

중복값을 저장하지 않으며, 순서를 보장하지 않는다. 

이진탐색 구조로 이루어져 있으며, 자동정렬을 지원한다. 

 

3. LinkedHashSet

Set<> set = new LinkedHashSet<>();

중복값을 저장하지 않으며 저장순서를 유지한다. 

 

 

 

 

Join(String, Object[])

각 요소 사이에 지정된 구분 기호를 여러 개의 문자열을 연결한다. 

public static string Join (string? separator, params object?[] values);
  • separator : 구분 기호로 사용할 문자열
  • values : 연결할 요소가 포함된 배열

 

 


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

 

프로그래머스

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

programmers.co.kr