본문 바로가기

문제 풀이/인프런

[JAVA11/알고리즘]1-6 중복 문자 제거

문제

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

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


입력

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


출력 

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


예시 입력 1 

ksekkset


예시 출력 1

 

kset

 



해결

먼저, indexOf 함수에 대해서 알아보자.

특정 문자가 문자열의 어느 index에 위치하는지 찾기 위해서 indexOf 함수를 사용한다.


 string.indexOf(searchvalue, position) : 문자열에서 특정문자열을 찾고, 검색된 문자열이 '첫번째'로 나타나는 위치 index를 리턴해준다. 

  • 파라미터 
    • searchvalue : 필수 입력값, 찾을 문자열
    • position : optional, 기본값은 0, string에서 searchvalue를 찾기 시작할 위치
  • 찾는 문자열이 없으면 -1을 리턴해준다.
  • 문자열을 찾을 때 대소문자를 구분한다.

 말했다시피, indexOf 함수는 문자열이 첫번째로 나타나는 위치 index를 리턴해준다. 

중복되는 문자열을 제거해주려면 문자열을 문자단위로 끊어서, 그 문자가 처음 나온것인지 확인해주면 된다.

 

위 예제를 보고 설명하겠다.

System.out.println(str.charAt(i)+" "+i+" "+str.indexOf(str.charAt(i))); 코드가 출력된 것이 결과값들이다.

결과 값에서

첫 번째 줄은 문자열을 문자단위로 끊어준것이다.(str.charAt(i))

두 번째 줄은 문자열에서의 문자의 index 값을 적어준거다.(i)

세 번째 줄은 특정 문자가 문자열에서 첫번째로 나온 값을 적어준거다.(str.indexOf(str.charAt(i)))

 

우리의 문제는 중복된 문자열을 제거해주면 된다. 

위 예제에서 규칙을보면 indexOf함수를 쓴 값과 index값이 같으면 그 문자는 처음 나온것이다.

두 번째줄과 세 번째줄이 같다는말이다.

 

코드로 구현하자면 두 번째줄과 세번째줄이 같으면 빈String에 넣어주면 그 String에는 중복된 문자들은 모두 제거된 문자열만 남을것이다. 


CODE
 

import java.util.*;

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

        for(int i =0; i<str.length(); i++){
            if(i == str.indexOf(str.charAt(i))) answer+=str.charAt(i);
        }
        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의 상관관계를 이용해서 문제를 풀었다.

생각보다, 코드는 쉽게 나왔지만 그 상관관계를 이해하는것이 중요한 문제라고 생각된다.