특정 단어 뒤집기

문제

설명

영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고, 특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.

입력

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

출력

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

예시 입력 1

  a#b!GE*T@S

해결방법

  • 문자 위치를 바꿀 땐, 포인터를 사용하여 위치 값을 저장 및 사용한다.

    char[] c = s.toCharArray();
    int lt = 0;
    int rt = s.length() - 1;
    // lt랑 rt는 배열 내 위치를 가리키는 포인터 역할.
    // 서로 증가 / 감소하면서 위치를 가리킴.
    // 포인터가 서로 교차되는 경우 끝나야 하므로
    // lt < rt 조건 걸어놔야 함(같으면 안됨)
    while (lt < rt) {
      if (!Character.isAlphabetic(c[lt]))
        lt++;
      else if (!Character.isAlphabetic(c[rt]))
        rt--;
      else {
        char temp = c[lt];
        c[lt] = c[rt];
        c[rt] = temp;
        lt++;
        rt--;
      }
    }
    

코드

import java.util.*;

class Main {
    public 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 tmp = s[lt];
                s[lt] = s[rt];
                s[rt] = tmp;
                lt++;
                rt--;
            }
        }
        answer = String.valueOf(s);
        return answer;
    }

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


© 2024. Chiptune93 All rights reserved.