문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_string ≤ 110
- my_string은 대문자, 소문자, 공백으로 구성되어 있습니다.
- 대문자와 소문자를 구분합니다.
- 공백(" ")도 하나의 문자로 구분합니다.
- 중복된 문자 중 가장 앞에 있는 문자를 남깁니다.
입출력 예my_stringresult
"people" | "peol" |
"We are the world" | "We arthwold" |
입출력 예 설명
입출력 예 #1
- "people"에서 중복된 문자 "p"와 "e"을 제거한 "peol"을 return합니다.
입출력 예 #2
- "We are the world"에서 중복된 문자 "e", " ", "r" 들을 제거한 "We arthwold"을 return합니다.
1. 내가 푼 문제(LinkedHashSet과 StringBuilder 사용)
- 다른 게 생각이 안나서 LinkedHashSet으로 풀었다.. 그래도 시간은 빠른데.. LinkedHashSet을 쓰지 않고도 푼 방법이 많다.. 생각보다 더..!
import java.util.LinkedHashSet;
import java.util.Iterator;
class Solution {
public String solution(String my_string) {
StringBuilder sb = new StringBuilder();
LinkedHashSet<Character> set = new LinkedHashSet<>();
for(char ch: my_string.toCharArray()) {
set.add(ch);
}
//Iterator 생성 방법 (*한번 생성 후 재사용 할경우 재생성 필수)
Iterator<Character> iter = set.iterator();
while(iter.hasNext()) {
sb.append(iter.next());
}
return sb.toString();
}
}
2. indexOf
- 다른 분은 StringBuilder 없이 풀어서 오래걸렸는데 StringBuilder하니까 확실히 속도가 빠르다...!
- indexOf로 하면 이미 있는 문자를 구분가능..!
class Solution {
public String solution(String my_string) {
StringBuilder sb = new StringBuilder();
for(int i=0; i<my_string.length(); i++){
if(i==my_string.indexOf(my_string.charAt(i)))
sb.append(my_string.charAt(i));
}
return sb.toString();
}
}
3. replaceAll과 subString 활용
- 일단 먼저 StringBuilder에 저장한뒤에 그 문자를 my_string에서 해당하는 문자를 자르기 하는 식으로..!
class Solution {
public String solution(String my_string) {
StringBuilder sb = new StringBuilder();
while(my_string.length() > 0) {
sb.append(my_string.charAt(0));
my_string = my_string.replaceAll(my_string.substring(0, 1), "");
}
return sb.toString();
}
}
- replaceAll을 활용해서 풀고 싶었는데 막상 떠오르지 않았다...! subString이랑 같이 사용한 거 보고.. 아ㅏ.. 했다..
- 저번에 Set을 써봤던 경험으로 Set을 쓰긴 했는데 테스트 풀때는 나쁘지 않은 것 같은데 실제로 개발 할 때 쓸까..? 궁금하다.
'algorithm > Programmers' 카테고리의 다른 글
[JAVA] 대문자와 소문자(대문자, 소문자 변환) (0) | 2023.02.10 |
---|---|
[JAVA] 369 게임 (0) | 2023.02.09 |
[JAVA] 모음 제거 (0) | 2023.01.24 |
[JAVA] 숨어있는 숫자의 덧셈 (0) | 2023.01.24 |
[JAVA] 소인수분해(feat. Integer[ ] -> int[ ] / int[ ] -> Integer[ ]) (0) | 2023.01.24 |