본문 바로가기

문제 풀이/인프런

[JAVA11/알고리즘] 1-5 특정 문자 뒤집기

문제

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

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

 


입력

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

 


출력 

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


예시 입력 1 

a#b!GE*T@S


예시 출력 1

S#T!EG*b@a



 

 



해결

1-4 문자 뒤집기에서 썻던 방법을 응용하였다.

입력 받은 문자에서 맨 왼쪽을 lt, 맨 오른쪽을 rt로 두겠다. == int lt=0, rt = str.length()-1

그런다음 lt와 rt 가 둘다 알파벳이면 서로 교환해준다.

그리고 lt와 rt를 각각 오른쪽, 왼쪽으로 한칸씩 옮겨주면 된다.

 

여기서 포인트는

lt랑 rt 중 하나라도 알파벳이 아니면 그냥 각각 오른쪽, 왼쪽으로 한칸씩 옮겨주면 된다.

그럼 자동으로 알파벳이 아닌 문자는 건너뛰어 진것으로 쳐진다.

 

문자가 알파벳인지 확인하는 방법은

Character.isAlphabetic()을 사용한다.

 

Character.isAlphabetic(Char chr) : chr가 알파벳이면 True, 그렇지 않으면 False를 반환한다.

 

 

 

자세한 내용은 1-4 문자뒤집기에서 설명했기 때문에 생략하겠다. 



CODE
 



import java.util.*;

public class Main {
    public static String solution(String str){
        String answer;
        char[] s = str.toCharArray();
        int lt=0, rt = str.length()-1;
        while(lt<rt){
            if(!Character.isAlphabetic(s[lt])) lt++;
            else if(!Character.isAlphabetic(s[rt])) rt--;
            else{
                char tem = s[lt];
                s[lt] = s[rt];
                s[rt] = tem;
                lt++;
                rt--;
            }
        }
        answer = String.valueOf(s);

        return answer;
    }

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


 

 


결과