특정 단어 뒤집기
문제
설명
영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고, 특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.
입력
첫 줄에 길이가 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));
}
}