문제
소문자로 된 한개의 문자열이 입력되면 중복된 문자를 제거하고 출력하는 프로그램을 작성하세요.
중복이 제거된 문자열의 각 문자는 원래 문자열의 순서를 유지합니다.
입력
첫 줄에 문자열이 입력됩니다. 문자열의 길이는 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의 상관관계를 이용해서 문제를 풀었다.
생각보다, 코드는 쉽게 나왔지만 그 상관관계를 이해하는것이 중요한 문제라고 생각된다.
'문제 풀이 > 인프런' 카테고리의 다른 글
[JAVA11/알고리즘]1-8 유효한 팰린드롬 (0) | 2022.08.04 |
---|---|
[JAVA11/알고리즘]1-7 회문 문자열 (0) | 2022.08.02 |
[JAVA11/알고리즘] 1-5 특정 문자 뒤집기 (1) | 2022.07.31 |
[Java11/알고리즘] 1-4 단어 뒤집기 (0) | 2022.07.31 |
[Java11/알고리즘] 1-3 문장 속 단어 (1) | 2022.07.29 |