알고리즘(Algorithm)

[Algorithm] 중복문자제거

XDXDX 2023. 3. 24. 14:37

1. 문제

소문자로 된 한 개의 문자열이 입력되면 중복된 문자를 제거하고 출력하는 프로그램을 작성

중복이 제거된 문자열의 각 문자는 원래 문자열의 순서를 유지

2. 예시

apple
aple

3. 코드

public class Main {
    public String solution(String str){
        String ans = "";

         for(int i =0;i<str.length();i++){
             if(str.indexOf(str.charAt(i)) == i){
                 ans += str.charAt(i);
             }
         }

        return ans;

    }
    public static void main(String[] args) {
        Main case6 = new Main();
        Scanner in = new Scanner(System.in);

        String str = in.nextLine();

        System.out.println(case6.solution(str));
    }
  1. 문자 길이만큼 for문 돌리기
  2. indexOf() 사용해 i번째 문자와 비교 후 같으면 ans에 저장
  3. 예를 들어, apple의 문자에 중복되는 값을 없앨 경우, apple의 길이는 5.
  4. i = 0 일 경우, str.charAt(0) = a이고 a의 indexOf()는 0이다.
  5. i와 indexO()의 값이 같으므로 ans에 저장
  6. i = 2 일 경우, str.charAt(2) = p이고 p의 indexOf()는 앞에 있는 p가 되므로 i와 indexOf()의 값이 일치하지 않음
  7. 이렇게 반복문이 돌면 return 값은 aple이 된다.

4. 마무리

public String solution(String str){
        String ans = "";
        char[] ch = str.toCharArray();
      
        for(char i : ch){
            if(!ans.contains(String.valueOf(i))) ans += i;
        }
        return ans;
    }
  1. 다른 방법들을 찾아보니 cotains() 메서드 사용하는 법이 있었다.
  2. String변수를 char 배열로 변환 후 ch의 길이만큼 for문을 돌린다.
  3. String.valueOf(i)의 값이 ans에 포함되어 있지 않으면 true로 ans에 저장
  4. 아니면 false

[contains()]

String 메서드

String 문자열 값에 특정 문자열이 포함되어 있는지 확인

ex) String str = "Hello My name is 000";

contains("Hello") => true

contains("abc") => false