Java 알고리즘

[Java | 알고리즘] 특정 문자 뒤집기 / lt, rt 이용해서 풀이

엘라 ELLA 2023. 1. 13. 13:00
728x90
반응형

설명

영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고,

특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.

 

입력

첫 줄에 길이가 100을 넘지 않는 문자열이 주어집니다.

 

출력

첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다.

 

예시 입력 1 

a#b!GE*T@S

예시 출력 1

S#T!EG*b@a

 

 


 

 

정답 코드 및 풀이

 

lt 는 LefT의 줄임말이고 rt는 RighT의 줄임말입니다.

말 그대로 lt는 제일 왼쪽의 글자부터 오른쪽으로 이동하고, rt는 제일 오른쪽의 끝 글자부터 왼쪽으로 이동합니다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //입력을 받는 Scanner
        Scanner sc = new Scanner(System.in);
        //입력한 내용을 받음
        String str = sc.next();
        //정답 출력을 위한 answer선언
        String answer;


        //문자 배열 하나 생성
        char[] chars = str.toCharArray();

        //lt는 첫번째 문자를 가리키고, rt는 마지막 글자를 가리킴
        //배열은 0부터 시작하기 때문에 -1을 해주어야 마지막 배열이 됨.
        int lt = 0, rt = str.length()-1;

        //lt가 rt보다 왼쪽에 있을 때 까지 반복
        while (lt < rt){
            //Character.isAlphabetic()을 이용해서 특수문자 여부 확인
            if (!Character.isAlphabetic(chars[lt])) {
                //알파벳이 아니면 오른쪽으로 한칸 이동
                lt ++;
            //rt도 특수문자인지 확인
            } else if (!Character.isAlphabetic(chars[rt])){
                //알파벳이 아니면 왼쪽으로 한칸 이동
                rt --;
            //둘 다 알파벳이면 두개 자리 바꾸기
            } else {
                //잠시 자리바꿔치기를 위해 tmp생성
                char tmp = chars[lt];
                chars[lt] = chars[rt];
                chars[rt] = tmp;
                //자리를 바꾸고 나면 둘 다 각자 방향으로 한칸씩 옆으로 이동
                lt++;
                rt--;
            }
        }
        //정답 출력
        answer = String.valueOf(chars);
        System.out.println(answer);
    }
}

 


 

 

게시글이 도움이 되었다면

[로그인]이 필요 없는 ❤ 눌러주세요:)

반응형