중복문자제거

Seungmin Lim·2022년 2월 4일
1

코딩문제연습

목록 보기
6/63

문제

나의풀이

import java.util.*;

class Main {
	public String solution(String str) {
		String answer = "";
        //contains()
		List<Character> list = new ArrayList<>();
		char[] arr = str.toCharArray();
		for(char x : arr) {
			if(!list.contains(x)) list.add(x);
		}
		for(char x : list) {answer += x;}
        
		//indexOf와 charAt을 활용한 for문
		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) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		String str = kb.next();
		System.out.println(T.solution(str));
	}
	
}

풀이법

  1. 문제만 보고 내가 풀어본것인데, 객체생성하고 필요없이 for문을 두번이나 돌려서 구현한것같은 느낌이다...
  1. indexOf가 갖는 가장 큰 특징중 하나는 그 찾는문자의 가장 빠른 index만을 갖는다는 것이다.
    예를들어) String str = kakaooo에서
    str.indexOf('k')는 0
    str.indexOf('a')는 1
    str.indexOf('o')는 4 라는것이다.

    즉, 이점을 활용하면, indexOf와 for문의 i가 같을때 빼고는!
    모두 중복 문자라는 것이다! (언제쯤 이렇게 바로바로 생각해낼수 있을까...)

    따라서, if(i == str.indexOf(str.charAt(i))) 일때 빼고는 그 뒤로는 중복문자라는 것이다.

핵심키워드

indexOf의 특성 : 해당문자의 가장 앞 index를 갖는다.
이 점을 외워두고 활용하자!

0개의 댓글