Coding Test Inflearn

[String] 특정 문자 뒤집기

coding-orange 2024. 1. 27. 21:46
728x90

특정 문자 뒤집기

 

 

설명

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

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

 

 

입력

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

 

 

출력

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

 

 

예시 입력

a#b!GE*T@S

 

 

예시 출력

S#T!EG*b@a

 

풀이

전 문제에서의 문자를 직접 교환하는 방법을 활용한다.

 

1. 입력받은 문자열(str)의 왼쪽 끝 인덱스를 가리키는 lt와 오른쪽 끝 인덱스를 기리키는 rt를 선언한다.

2. 입력받은 문자열(str)을 문자 배열로 바꾼다. String 클래스의 toCharArray() 를 이용한다.

3. lt가 rt보다 작을 때 까지 아래 로직을 반복한다.

4-1. lt 위치의 문자가 특수문자이면 (즉, 알파벳이 아니면) lt를 증가시킨다. 알파벳인지 검증하려면 Character.isAlphabetic() 를 사용한다.

4-2. rt 위치의 문자가 특수문자이면 (즉, 알파벳이 아니면) rt를 증가시킨다.

4-3. 그렇지 않으면 (즉, lt와 rt 모두 알파벳이면) lt 위치의 문자와 rt 위치의 문자를 교환하고 lt는 증가, rt는 감소시킨다.

5. 문자 배열을 문자열로 만든다. String 클래스의 valueOf() 를 사용한다.

 

 

코드

package solve;

import java.util.Scanner;

public class Main_1_5 {

    public String solution(String str) {

        String answer;
        int lt = 0, rt = str.length()-1;

        char [] charArr = str.toCharArray();
        
        while(lt < rt) { // lt가 rt보다 작을 때 까지만 반복
            if(!Character.isAlphabetic(charArr[lt])) lt++; // lt가 특수문자이면 lt 증가
            else if(!Character.isAlphabetic(charArr[rt])) rt--; // rt가 특수문자이면 rt 감소
            else { // 그렇지 않으면 교환 후 lt 증가, rt 감소
                char tmp = charArr[rt];
                charArr[rt] = charArr[lt];
                charArr[lt] = tmp;
                lt++; rt--;
            }
        }

        answer = String.valueOf(charArr);
        return answer;
        
    }

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