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 으로 바꾸어 출력하니
문자열로 바로 출력이 되었다