알고리즘/인프런_자바코테강의

인프런 6. 중복 문자 제거 (Java)

고구마와 감자 2022. 3. 10. 22:32

 

내 풀이 

ArrayList의 contains로 list에 안 담겨 있는 문자를 추가해주고 출력

public class Main {
    public String solution(String str) {
        String answer = "";
        ArrayList<Character> list = new ArrayList<>();
        char[] c = str.toCharArray();
        for (int i = 0; i < str.length(); i++) {
            if (!list.contains(c[i])) {
                list.add(c[i]);
            }
        }
        for (int i = 0; i < list.size(); i++) {
            answer += list.get(i);
        }
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        Main T = new Main();
        System.out.println(T.solution(s));
    }
}

 

슨상님 풀이 

이런 풀이방법을 처음에 출력문으로 보여주고 설명을 해줘서 이해하기 정말 좋았다. 

i 와 indexOf가 같다면 중복문자의 첫 번째이므로 이를 넣어준다. 만약 문자가 2번째 나오면 indexOf는 앞에서부터 찾기 때문에 앞에서 나온 같은 문자의 인덱스가 나오게 된다. 

public class Main2 {
    public String 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)));

            //  indexOf를 활용한 풀이 indexOf는 앞에서부터 찾는다.
            // 문자의 인덱스(위치)와 indexOf로 나온 위치가 같다면 처음 나온 문자이다.위 프린트문을 출력해보면 알 수 있다.
            if (str.indexOf(str.charAt(i)) == i) {
                answer += str.charAt(i);
            }
        }
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        Main2 T = new Main2();
        System.out.println(T.solution(s));
    }
}