import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Scanner;
public class Main {
public static void Solution(String str) {
// LinkedHashSet을 사용하면 add()한 순서대로 삽입된다.
LinkedHashSet<String> hs = new LinkedHashSet<String>();
char[] c = str.toCharArray();
for(char ch : c){
// add(String e) : char을 String으로 변환해주어야 한다.
hs.add(String.valueOf(ch));
}
// HashSet에는 순서가 없기 때문에 iterator를 사용하여 집합 내의 원소를 출력
Iterator<String> iter = hs.iterator();
while(iter.hasNext()){
System.out.print(iter.next());
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.next();
Solution(str);
}
}
[결과]
ex) str = banana
char[] c = str.toCharArray();
// c = [b,a,n,a,n,a] 가 입력되어있다.
for(char ch : c){
hs.add(String.valueOf(ch));}
// add()의 인자로 String이 들어가야 하므로
// String.valueOf()를 통해 char을 String으로 변환한다.
/*
index 0 = [b] → hs.add(b) O
index 1 = [a] → hs.add(a) O
index 2 = [n] → hs.add(n) O
index 3 = [a] → hs.add(a) X
index 4 = [n] → hs.add(n) X
index 5 = [a] → hs.add(a) X
*/
System.out.print(hs);
[결과]
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Scanner;
public class Main {
public static String Solution(String str){
String answer= "";
for(int index = 0; index < str.length() ; index++){
if(str.indexOf(str.charAt(index)) == index){
answer += str.charAt(index);
}
}
return answer;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.next();
System.out.println(Solution(str));
}
}
[결과]
indexOf : 원하는 문자가 처음 나오는 index값을 알려준다.
ex) String str = "Programming";
str.indexOf("m"); → 6 출력
첫번째 "m"의 경우, index = 6
2번째 "m"의 경우 ,index = 7, str.indexOf("m") = 6 이므로 첫번째가 아니다.
ex2) String str = "ksekkset";
str.indexOf("k") = 0
첫번째 "k" index = 0
두번째 "k" index = 3
세번째 "k" index = 4
>> 즉, str.indexOf("k") == index 일 때 문자가 맨 처음 나온 것이다.
>> 중복된 문자를 제거하기 위해 str.indexOf() != index 인 경우는
answer에 + 하지 않는다.