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

자바(Java)로 문자열을 알파벳순으로 정렬하는 프로그램 만들기


이 글에서는 자바(Java)로 문자열을 정렬하는 방법을 단계별로 살펴봅니다. 문자열(String)은 하나 이상의 문자로 구성되며 큰따옴표(" ")로 감싸 표현하는 데이터 타입으로, 본질적으로는 문자들의 연속(sequence)입니다.

아래는 실제 동작 예시입니다.

입력값

Input string: javaprogram

기대 출력 결과

String after sorting is: [a, a, a, g, j, m, o, p, r, r, v]

즉, 문자열 "javaprogram"을 구성하는 문자들을 알파벳 순서(a → z)대로 재배열하는 것이 목표입니다.

정렬 알고리즘

여기서는 인접한 두 문자를 반복적으로 비교하고 교환하는 버블 정렬(Bubble Sort) 방식을 사용합니다.

Step 1 - 프로그램 시작
Step 2 - 문자열 변수 input_string, 문자 배열 charArray, 임시 저장용 char 변수 temp, 크기 저장용 int 변수 string_size를 선언한다.
Step 3 - 각 변수에 값을 할당한다.
Step 4 - toCharArray() 메서드로 문자열을 문자 배열로 변환한다.
Step 5 - 이중 반복문으로 문자 배열을 순회하며 인접한 요소를 비교하고, 순서가 맞지 않으면 temp 변수를 이용해 서로 교환(swap)한다.
Step 6 - 정렬이 완료된 배열을 출력한다.
Step 7 - 프로그램 종료

예제 1: main 메서드에서 모든 로직 처리

첫 번째 방식은 모든 연산을 'main' 메서드 안에 직접 작성하는 절차적 스타일입니다.

import java.util.Arrays;
public class SortString {
    public static void main(String args[]) {
        int temp, string_size;
        String input_string = "javaprogram";
        System.out.println("정의된 문자열: " + input_string);
        char charArray[] = input_string.toCharArray();
        string_size = charArray.length;
        for(int i = 0; i < string_size; i++ ) {
            for(int j = i+1; j < string_size; j++) {
                if(charArray[i] > charArray[j]) {
                    temp = charArray[i];
                    charArray[i] = charArray[j];
                    charArray[j] = (char) temp;
                }
            }
        }
        System.out.println("\n정렬 후 문자 배열: " + Arrays.toString(charArray));
    }
}

실행 결과

정의된 문자열: javaprogram

정렬 후 문자 배열: [a, a, a, g, j, m, o, p, r, r, v]

예제 2: 객체 지향 방식으로 구현

두 번째 방식은 정렬 로직을 별도의 메서드로 분리해 캡슐화함으로써 객체 지향 프로그래밍(OOP)의 장점을 살린 구조입니다. 이렇게 하면 코드의 재사용성과 가독성이 크게 향상됩니다.

import java.util.Arrays;
public class SortString {
    static void sort(String input_string){
        int temp, string_size;
        char charArray[] = input_string.toCharArray();
        string_size = charArray.length;
        for(int i = 0; i < string_size; i++ ) {
            for(int j = i+1; j < string_size; j++) {
                if(charArray[i] > charArray[j]) {
                    temp = charArray[i];
                    charArray[i] = charArray[j];
                    charArray[j] = (char) temp;
                }
            }
        }
        System.out.println("\n정렬 후 문자 배열: " + Arrays.toString(charArray));
    }
    public static void main(String args[]) {
        String input_string = "javaprogram";
        System.out.println("정의된 문자열: " + input_string);
        sort(input_string);
    }
}

실행 결과

정의된 문자열: javaprogram

정렬 후 문자 배열: [a, a, a, g, j, m, o, p, r, r, v]

참고: Arrays.sort()로 더 간단하게 정렬하기

정렬 알고리즘을 직접 구현하지 않고도 자바 표준 라이브러리의 Arrays.sort() 메서드를 사용하면 한 줄로 문자 배열을 오름차순 정렬할 수 있습니다.

import java.util.Arrays;
public class SortStringSimple {
    public static void main(String args[]) {
        String input_string = "javaprogram";
        char charArray[] = input_string.toCharArray();
        Arrays.sort(charArray);
        System.out.println("정렬 후 문자 배열: " + Arrays.toString(charArray));
    }
}

이 방법은 코드가 매우 간결하다는 장점이 있습니다. 다만 내부적으로 듀얼피벗 퀵소트(Dual-Pivot Quicksort) 같은 고급 알고리즘이 동작하므로, 정렬의 원리를 깊이 이해하고 싶다면 예제 1과 2처럼 직접 구현해 보는 것이 좋습니다.