728x90
특정 문자 뒤집기
설명
영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고,
특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.
입력
첫 줄에 길이가 100을 넘지 않는 문자열이 주어집니다.
출력
첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다.
예시 입력
a#b!GE*T@S
예시 출력
S#T!EG*b@a
풀이
전 문제에서의 문자를 직접 교환하는 방법을 활용한다.
1. 입력받은 문자열(str)의 왼쪽 끝 인덱스를 가리키는 lt와 오른쪽 끝 인덱스를 기리키는 rt를 선언한다.
2. 입력받은 문자열(str)을 문자 배열로 바꾼다. String 클래스의 toCharArray() 를 이용한다.
3. lt가 rt보다 작을 때 까지 아래 로직을 반복한다.
4-1. lt 위치의 문자가 특수문자이면 (즉, 알파벳이 아니면) lt를 증가시킨다. 알파벳인지 검증하려면 Character.isAlphabetic() 를 사용한다.
4-2. rt 위치의 문자가 특수문자이면 (즉, 알파벳이 아니면) rt를 증가시킨다.
4-3. 그렇지 않으면 (즉, lt와 rt 모두 알파벳이면) lt 위치의 문자와 rt 위치의 문자를 교환하고 lt는 증가, rt는 감소시킨다.
5. 문자 배열을 문자열로 만든다. String 클래스의 valueOf() 를 사용한다.
코드
package solve;
import java.util.Scanner;
public class Main_1_5 {
public String solution(String str) {
String answer;
int lt = 0, rt = str.length()-1;
char [] charArr = str.toCharArray();
while(lt < rt) { // lt가 rt보다 작을 때 까지만 반복
if(!Character.isAlphabetic(charArr[lt])) lt++; // lt가 특수문자이면 lt 증가
else if(!Character.isAlphabetic(charArr[rt])) rt--; // rt가 특수문자이면 rt 감소
else { // 그렇지 않으면 교환 후 lt 증가, rt 감소
char tmp = charArr[rt];
charArr[rt] = charArr[lt];
charArr[lt] = tmp;
lt++; rt--;
}
}
answer = String.valueOf(charArr);
return answer;
}
public static void main(String[] args) {
Main_1_5 T = new Main_1_5();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
System.out.println(T.solution(str));
}
}
728x90
'Coding Test Inflearn' 카테고리의 다른 글
[String] 회문 문자열 (2) | 2024.01.28 |
---|---|
[String] 중복 문자 제거 (0) | 2024.01.27 |
[String] 단어 뒤집기 (0) | 2024.01.26 |
[String] 문장 속 단어 (2) | 2024.01.26 |
[String] 대소문자 변환 (0) | 2024.01.24 |