ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 알고리즘 - 중복된 문자 제거
    Java 알고리즘 문제/자바(Java) 알고리즘 문제풀이 입문 2023. 5. 17. 23:26
    반응형
     

    중복 문자제거

    설명

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

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

     

    입력

    첫 줄에 문자열이 입력됩니다. 문자열의 길이는 100을 넘지 않는다.

     

    출력

    첫 줄에 중복문자가 제거된 문자열을 출력합니다.

     

    Ex) ksekkset   ===>   kset

     

     

    package chap1;
    
    import java.util.Scanner;
    
    public class Ex02_solution {
        public String ex2_solution(String str){
            String answer="";
            for(int i=0; i<str.length(); i++){
                System.out.println(str.charAt(i) + " " +i+ " " + str.indexOf(str.charAt(i)));
                if(str.indexOf(str.charAt(i)) == i){
                    answer +=str.charAt(i);
                }
            }
    
            return answer;
        }
        public static void main(String[] args) {
            Ex02_solution T = new Ex02_solution();
            Scanner kb = new Scanner(System.in);
            String str = kb.next();
            System.out.println(T.ex2_solution(str));
        }
    }
    

     

     

    우선 입력받은 코드를 작성해보자

    Ex02_solution T = new Ex02_solution();
    Scanner kb = new Scanner(System.in);
    String str = kb.next();
    System.out.println(T.ex2_solution(str));

    그런 후에 입력받은 문자열을 검토해보

    public String ex2_solution(String str){
        String answer="";
        for(int i=0; i<str.length(); i++){
            System.out.println(str.charAt(i) + " " +i+ " " + str.indexOf(str.charAt(i)));
        }
        return answer;
    }

    ksekkset를 입력한다면

    ========실행결과=========
    k 0 0
    s 1 1
    e 2 2
    k 3 0
    k 4 0
    s 5 1
    e 6 2
    t 7 7

     

    이와같은 println이 출력된다.

    k s e k k s e t

    입력받은 문자열을 for문을 돌아 값을 출력한다.

     

    indexOf() , indexOf("찾을 특정 문자", "시작할 위치")

    • 특정 문자문자열이 앞에서 부터 처음 발견되는 인덱스를 반환, 찾지 못하는 경우에는 "-1"을 반환

    indexOf를 통하여 값을 출력해본다면

    k의 경우 i=0번째 일때 0번재 순서에 들어있고

    두번째 k의 경우 i=3이고 k는 0번째에 들어있다는 것을 확인할 수 있다.

     

     

    즉 for문을 돌면서 i의 값과 해당 문자열이 위치한 값이 동일하다면 중복이 없다는 의미이다.

    public String ex2_solution(String str){
        String answer="";
        for(int i=0; i<str.length(); i++){
            System.out.println(str.charAt(i) + " " +i+ " " + str.indexOf(str.charAt(i)));
            if(str.indexOf(str.charAt(i)) == i){
                answer +=str.charAt(i);
            }
        }
    
        return answer;
    }

    이와같이 for문을 돌면서 if()조건을 넣어준다면 중복된 문자를 제거할 수 있다.

    반응형

    댓글

Designed by Tistory.