Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)로 문자열에서 중복 문자 찾기 – 완벽 가이드

이 글에서는 자바(Java)를 사용해 문자열 안에서 중복된 문자를 찾는 방법을 단계별로 알아보겠습니다. 문자열(String)은 하나 이상의 문자로 구성되며, 큰따옴표(" ")로 감싸서 표현하는 자료형입니다.

먼저 예제를 통해 어떤 동작을 수행하는지 확인해 보겠습니다.

입력값

Input string: Java Programming

출력값

The duplicate characters in the string are: a a r g m

위 예제에서 볼 수 있듯이 "Java Programming"이라는 문자열에는 'a', 'r', 'g', 'm' 등의 문자가 여러 번 등장하며, 프로그램은 이러한 중복 문자들을 순서대로 출력합니다.

알고리즘

중복 문자를 찾는 과정은 다음과 같은 단계로 진행됩니다.

Step 1 - START (프로그램 시작)
Step 2 - 문자열 변수 input_string과 char 배열 character_array를 선언한다.
Step 3 - 문자열 값을 정의한다.
Step 4 - 문자열을 char 배열로 변환한다.
Step 5 - i와 j 인덱스를 사용해 배열을 이중으로 순회하며, if 조건문으로 i번째 값과 j번째 값이 일치하는지 검사한다. 일치하면 중복 문자이므로 해당 값을 저장한다.
Step 6 - 결과를 화면에 출력한다.
Step 7 - STOP (프로그램 종료)

핵심 아이디어는 간단합니다. 문자열을 문자 배열로 변환한 뒤, 모든 문자 쌍을 서로 비교하여 같은 문자가 발견되면 그것이 바로 중복 문자입니다.

예제 1 – main 메서드에서 직접 구현하기

첫 번째 방식은 모든 로직을 main 메서드 안에 한꺼번에 작성하는 방법입니다. 코드가 짧고 흐름을 한눈에 파악할 수 있어 간단한 학습용으로 적합합니다.

public class Demo {
    public static void main(String argu[]) {
        String input_string = "Java Programming";
        System.out.println("The string is defined as: " + input_string);
        char[] character_array = input_string.toCharArray();
        System.out.print("\nThe duplicate characters in the string are: ");
        for (int i = 0; i < input_string.length(); i++) {
            for (int j = i + 1; j < input_string.length(); j++) {
                if (character_array[i] == character_array[j]) {
                    System.out.print(character_array[j] + " ");
                    break;
                }
            }
        }
    }
}

실행 결과

The string is defined as: Java Programming

The duplicate characters in the string are: a a r g m

예제 2 – 객체 지향 방식으로 함수 분리하기

두 번째 방식은 중복 문자를 찾는 로직을 별도의 메서드로 분리하여 캡슐화한 것입니다. 이처럼 기능을 독립적인 함수로 만들면 코드의 재사용성과 유지보수성이 높아지며, 객체 지향 프로그래밍(OOP)의 장점을 살릴 수 있습니다.

public class Demo {
    static void duplicate_characters(String input_string){
        char[] character_array = input_string.toCharArray();
        System.out.print("\nThe duplicate characters in the string are: ");
        for (int i = 0; i < input_string.length(); i++) {
            for (int j = i + 1; j < input_string.length(); j++) {
                if (character_array[i] == character_array[j]) {
                    System.out.print(character_array[j] + " ");
                    break;
                }
            }
        }
    }
    public static void main(String argu[]) {
        String input_string = "Java Programming";
        System.out.println("The string is defined as: " + input_string);
        duplicate_characters(input_string);
    }
}

실행 결과

The string is defined as: Java Programming

The duplicate characters in the string are: a a r g m

마무리

지금까지 자바에서 문자열의 중복 문자를 찾는 두 가지 방법을 살펴보았습니다. 이중 반복문을 사용한 이 방식은 시간 복잡도가 O(n²)이므로 문자열이 길어지면 성능이 떨어질 수 있습니다. 실무에서는 HashSet이나 Map을 활용하면 O(n)의 시간 복잡도로 더 효율적으로 처리할 수 있으니, 개념을 익힌 후 참고하시기 바랍니다.