순간을 기록으로

[Java] 문자열 안 중복문자 제거하기 | 인프런 | 본문

Problem Solving

[Java] 문자열 안 중복문자 제거하기 | 인프런 |

luminous13 2022. 4. 20. 12:47

문제

 

풀이 1 - 사용한 문자를 기록하기

앞에서 사용했던 문자들을 기록할 배열을 만들고 새로운 문자들을 붙일 때 앞에서 나온 적이 있는지 검사하는 알고리즘입니다.

 

import java.util.ArrayList;
import java.util.Scanner;

/*
* 소문자 한 개 문자열이 입력되면 중복된 문자가 제거되고, 순서를 유지하는 문자열을 출력하세요.
* - 문자열을 각 문자씩 앞에서부터 접근합니다.
* - 문자에 접근하고 앞에서 나온적이 있는지 검사합니다.
* - 나온적이 없으면 문자를 붙이고, 나온적이 있으면 통과합니다.
* */
public class Main {
    public static String solution(String str) {
        ArrayList<Character> usedLetters = new ArrayList<>();

        StringBuilder sb = new StringBuilder();
        for (char ch : str.toCharArray()) {
            if (!usedLetters.contains(ch)) {	// 사용한 적이 없으면
                sb.append(ch);
                usedLetters.add(ch);
            }
        }
        return sb.toString();
    }

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

 

풀이 2 - String 클래스 IndexOf(문자) 활용하기

 

String 클래스 안에 있는 IndexOf 메서드는 문자를 입력으로 받습니다. 만약 문자열 안에 해당 문자가 여러 개 존재하면 가장 앞에 있는 문자의 인덱스를 반환합니다. 만약 문자열에 해당 문자가 없으면 -1을 리턴합니다.

 

// indexOf의 특성을 이용한다. indexOf(문자)는 문자열에서 해당 문자인 첫번째 인덱스를 반환한다.
import java.util.Scanner;

public class Main {
    public String solution(String str) {
        String answer = "";
        StringBuilder sb = new StringBuilder();

        for(int i=0; i<str.length(); i++) {
            if(str.indexOf(str.charAt(i)) == i)
                sb.append(str.charAt(i));
        }

        answer = sb.toString();

        return answer;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.next();

        Main T = new Main();
        System.out.println(T.solution(str));
    }
}
Comments