알고리즘

특정 문자 뒤집기

donggi 2022. 1. 2. 16:38
import java.util.Scanner;

public class FlipSpecificText {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        char[] str = sc.next().toCharArray();
        int left = 0;
        int right = str.length - 1;

        while (left < right) {
            if (!Character.isAlphabetic(str[left])) {
                left++;
            } else if (!Character.isAlphabetic(str[right])) {
                right--;
            } else {
                char temp = str[left];
                str[left] = str[right];
                str[right] = temp;
                left++; // swap을 했을 때 left, right 포인터의 위치를 직접 이동시켜주어야한다.
                right--;
            }
        }
        System.out.println(String.valueOf(str));
    }
}
- 이번 문제를 풀면서 인강에서 새롭게 배운 게 많았다.
- 전체를 뒤집는 게 아닌 알파벳만 뒤집는 문제여서 이중 포인터를 사용했다
- lt, rt 각각의 포인터를 문자 첫번째, 마지막에 위치시킨다
- while 문 조건을 rt 가 lt 보다 클 때까지로 설정해주어서 lt, rt 위치가
  역전되기 전까지 반복시켜준다
- 입력 받은 문자열을 char 타입 배열에 저장했다. toCharArray() 메서드
  사용
- if 조건문으로 두 포인터가 알파벳을 가리키고 있을 때 스왑을 했는데
  조건에는 Character.isAlphabetic() 메서드에 ! 를 붙여 알파벳이 아닐 때
  포인터만 이동시키고 else에서 swap해주었다
- char 배열을 toString() 메서드로 출력하면 [%, %, %, %] 이런 식으로
  나왔는데 String.valueOf() 메서드로 배열을 String 으로 바꾸어 출력하니
  문자열로 바로 출력이 되었다

'알고리즘' 카테고리의 다른 글

이진 탐색  (0) 2022.01.16
문자 찾기  (0) 2021.12.30