김태원 님의 '자바(Java) 알고리즘 문제풀이 입문: 코딩테스트' 강의를 보고 정리한 글입니다.
설명
영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고,
특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.
입력
첫 줄에 길이가 100을 넘지 않는 문자열이 주어집니다.
출력
첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다.
입력 - a#b!GE*T@S
출력 - S#T!EG*b@a
먼저 입력받은 문자열을 문자배열로 만들어서 쪼개줍니다.
그리고 양쪽에서 각각의 문자를 탐색한뒤 특수문자가 아닌 영어 알파벳이라면 서로 위치를 바꾸어줍니다.
만일 알파벳이아니라면 서로의 위치가 바뀌면 안되니 그냥 지나가도록 해줍니다.

package section1;
import java.util.Scanner;
public class Test5 {
public String solution(String str){
String answer = "";
char[] s = str.toCharArray();
int lt = 0;
int rt = str.length()-1;
while(lt < rt){
if(!Character.isAlphabetic(s[lt])) lt++;
else if(!Character.isAlphabetic(s[rt])) rt--;
else{
char temp = s[lt];
s[lt] = s[rt];
s[rt] = temp;
lt++;
rt--;
}
}
answer = String.valueOf(s); //s를 string으로 바꿔줌.
return answer;
}
public static void main(String[] args) {
Test5 t = new Test5();
Scanner in = new Scanner(System.in);
String s = in.next();
System.out.println(t.solution(s));
}
}
문자열을 받은 후 substring을 이용해 문자열을 쪼갤생각만 했지 문자열을 문자배열로 바꿔 편하게 할 생각을 하지 못해 처음 버벅거렸다. 그리고 반복문을 돌려 int i=0 부터 시작해 문자열 길이까지 반복문을 돌리려하니 문자열 뒤집기가 생각대로 되지않아 어려웠는데 양 끝에서 시작해 서로 위치를 바꿔주면 된다는 힌트를 들으니 조금은 방향을 잡을 수 있었지만 강의를 듣고나니 온전히 코드를 이해하며 문제를 풀 수 있었다.