코딩테스트 정리(자바)
프로그래머스 - 중복된 문자 제거(Level 1)
재히hj
2024. 1. 25. 21:39
728x90
import java.util.*;
class Solution {
public String solution(String my_string) {
Set <String> set=new LinkedHashSet<>(); //순서보장, HashSet은 순서보장X
String[] str=my_string.split("");
for(String s:str){
set.add(s);
}
String[] s=set.toArray(new String[0]);
//set을 배열로, set은 인덱스로 접근하지 못함.
StringBuilder sb=new StringBuilder();
for(String s1:s){
sb.append(s1);
}
return sb.toString();
}
}
1. HashSet은 넣은 순서대로 보관되지 않는다.
순서를 보장받고 싶다면 LinkedHashSet을 사용해야 한다
2. set은 인덱스로 접근하지 못한다. -> iterator로 접근은 가능
리스트처럼 원소 하나씩 리턴하지 못함. -> get 메서드가 없음
3. set을 배열로 만드는 법
String[] str=set.toArray(new String[0]);
자꾸 까먹는다.. 기억하자
HashSet을 이용한 풀이
: set을 통해 해당 문자열이 있는지 확인 .
set에 넣지않고 바로 StringBuilder에 담아서 순서문제 해결.
import java.util.*;
class Solution {
public String solution(String my_string) {
Set <String> set=new HashSet<>();
String[] str=my_string.split("");
StringBuilder sb=new StringBuilder();
for(String s:str){
if(set.contains(s))
continue;
set.add(s);
sb.append(s);
}
return sb.toString();
}
}
char로 확인하는 것도 가능
import java.util.*;
public class Solution {
public String solution(String myString) {
Set<Character> used = new HashSet<>();
StringBuilder builder = new StringBuilder();
for (char c : myString.toCharArray()) {
if (used.contains(c)) continue;
used.add(c);
builder.append(c);
}
return builder.toString();
}
}728x90