Java / / 2022. 11. 29. 15:47

[알고리즘/JAVA] String(문자열) - 중복문자제거

반응형

 

문제

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

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

 

입력

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

출력

  • 첫 줄에 중복 문자가 제거된 문자열을 출력

 

더보기

예시 입력 - ksekkset / 예시 출력 - kset

 


Solution

✨ 먼저 간단한 코드를 사용하여 이해해 보자.

 

아래 주석처리 되어있는 코드를 통해 알아보려고 한다.

  1. 먼저 str.charAt()으로 i 번째에 해당하는 문자를 출력한다.
  2. i를 출력한다.
  3. str.indexOf()로 첫번째 문자열 앞에서부터 처음 발견되는 인덱스를 반환한다.

 

🎈 아래 사진처럼 결과를 보면 i와 indexOf(i)의 결과가 같은 문자만 담아서 출력하면 된다는 결론에 도달할 수 있다.

 

참고

🌈 charAt()

  • String으로 받은 문자열을 char 타입으로 한 글자만 받는 함수이다.
  • 문자열은 char 타입으로 반환한다.
  • 숫자로 반환 받고싶으면 아스키 코드 값으로 바꿔 줘야 한다.

🌈 indexOf()

  • 특정 문자나 문자열이 앞에서부터 처음 발견되는 index를 반환한다.
  • 찾지 못했을 경우 -1을 반환한다.

🌈 contains()

  • boolean contains(CharSequence s)
  • contains() 함수는 대상 문자열에 특정 문자열이 포함되어 있는지 확인하는 함수이다.
  • 대/소문자를 구분한다.

 

Code

1. charAt() , indexOf() 이용

import java.util.Scanner;

class Main {

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

    private 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)));
            if(str.indexOf(str.charAt(i)) == i) answer += str.charAt(i);
        }

        return answer;
    }
}

 

2. contains() 이용

import java.util.Scanner;

public class Main {
	
	private static String solution(String str) {
		String answer = "";
		char[] c = str.toCharArray();
		for (char x : c) {
			if (!answer.contains(String.valueOf(x))) answer += x;
		}
		
		return answer;
	}

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

}

 

정리

  • indexOf()와 charAt() 를 잘 활용해보자. 더 효율적인 코드를 사용 하게 될 것이다.
  • str.charAt(i) : i 번째 문자를 출력한다.
  • str.indexOf('A') : 문자 A의 위치 인덱스 i를 찾아준다.
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유