[프로그래머스]중복된 문자 제거
중복된 문자 제거
문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_string ≤ 110
- my_string은 대문자, 소문자, 공백으로 구성되어 있습니다.
- 대문자와 소문자를 구분합니다.
- 공백(“ “)도 하나의 문자로 구분합니다.
- 중복된 문자 중 가장 앞에 있는 문자를 남깁니다.
입출력 예
my_list | result |
---|---|
“people” | “peol” |
“We are the world” | “We arthwold” |
입출력 예 설명
입출력 예 #1
- “people”에서 중복된 문자 “p”와 “e”을 제거한 “peol”을 return합니다.
입출력 예 #2
- “We are the world”에서 중복된 문자 “e”, “ “, “r” 들을 제거한 “We arthwold”을 return합니다.
나의 풀이 코드
import java.util.*;
class Solution {
public String solution(String my_string) {
String answer = "";
ArrayList<String> list = new ArrayList<>(); // 새롭게 넣을 리스트
String[] strarr = my_string.split(""); //문자열을 배열로 변환
ArrayList<String> strlist = new ArrayList<String>(Arrays.asList(strarr)); //배열을 리스트로 변환
for (int i=0; i<my_string.length(); i++){
if (!list.contains(strlist.get(i))){ //list에 없으면 값 넣기(있으면 값 안넣음)
list.add(strlist.get(i));
}
}
answer = String.join("", list);
return answer;
}
}
문자열을 다루는것이 익숙치가 않다. 계속 해보자.
배운점
import java.util.stream.Collectors;
class Solution {
public String solution(String my_string) {
return my_string.chars()
.mapToObj(Character::toString)
.distinct()
.collect(Collectors.joining());
}
}
다른 사람이 푼 코드인데
문자열을 문자(char) 스트림으로 변환하고,
각 문자를 문자열로 변환하여 스트림의 요소를 변경하고,
중복된 문자를 제거하고,
스트림의 요소들을 문자열로 결합한다.
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);
}
}
다른 사람이 푼 또 다른 코드인데 정말 쉽게 풀었다.
문자열을 split해서 배열로 바꾸고 LinkedHashSet의 속성을 이용하여 원래 순서를 유지하며 중복을 제거한다.
이후 join한다.
import java.util.*;
import java.util.stream.Collectors;
class Solution {
public String solution(String myString) {
return Arrays.stream(myString.split("")).distinct().collect(Collectors.joining());
}
}
다른 사람이 푼 또 다른 코드인데 이 또한 간단하다.
문자열 배열로 split후 스트림으로 변환하고,
.distinct로 중복을 제거후,
join한다.
Leave a comment