문자열 중 알파벳만 순서바꾸기

YeonghooAhn·2021년 10월 30일
0

알고리즘

목록 보기
4/5

문자열을 입력하면 단어들을 탐색해 그 단어가 영문자면 해당 문자 및 문자와 대칭되는 순서에 있는 문자를 서로 바꾸는 알고리즘이다.

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        char[] ch = str.toCharArray();
        int lt = 0;
        int rt = str.length() - 1;
        while (lt < rt) {
            if (!(Character.isAlphabetic(ch[lt])))
                lt++;
            else if(!(Character.isAlphabetic(ch[rt])))
                rt--;
            else {
                char tmp = ch[lt];
                ch[lt] = ch[rt];
                ch[rt] = tmp;
                lt++;
                rt--;
            }
        }
        System.out.println(ch);
    }
}

보통 문자열의 맨 왼쪽에 있는 문자를 lt라고 칭하여 해당 문자를

탐색하기 위해 0으로 선언해줬다. 그리고 문자열의 맨 오른쪽은

rt이다. 알다시피 프로그래밍 언어의 인덱스는 0부터 시작이므로

끝 문자는 문자열 길이에서 1을 빼주어야 하므로 저렇게 선언했다

그 후 lt와 rt를 탐색해가며 lt는 한 칸씩 오른쪽으로 이동.

rt는 한 칸씩 왼쪽으로 이동하다보면 어느순간 lt가 rt보다

오른쪽에 위치해 오는 순간이 오는데 그때까지 while문을 돌린다.

문자열은 char형 배열과 동일하므로 char배열을 선언해 입력받은

문자열을 배열로 담아준다. 그 후 반복문을 돌린다 .

문자열을 굳이 char형 배열로 담아준 이유는 Character 객체를

사용하기 위해서다. Character 클래스에는 알파벳인지 판단해주는

메서드인 isAlphabetic이 존재한다. 이 메서드를 통해

알파벳을 인식하여 특수문자가 아닌 일반 알파벳이라면

그 위치에 있는 문자 및 그 문자와 대칭되는 곳에 있는 문자를

서로 바꿔준다. 당연히 서로 바꾸긴 위해선 임시로 lt 문자를 담을

그릇이 필요하므로 char형 임시변수를 선언해주고 여기에 lt를

담아 서로 교환해준다.

그리고 중요한 점은 알파벳이든 아니든 lt와 rt는 항상 반복문이

한 번 돌 때마다 한 칸씩 이동해야 한다. 안 그러면 무한루프에

빠지게 된다.

profile
책 중독 컴공과

0개의 댓글