[Java알고리즘] 6. 중복문자제거

진주·2022년 3월 9일
0

Java알고리즘

목록 보기
4/10

🌼 Problem


🍔 Solution 1 - LinkedHashSet 사용

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);

    }
}

[결과]


String.valueOf() 부가설명

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);

[결과]


🍔 Solution 2 - indexOf 사용


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() 부가설명

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에 + 하지 않는다.
profile
진주의 코딩일기

0개의 댓글

관련 채용 정보