문제
영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고,
특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.
입력
첫 줄에 길이가 100을 넘지 않는 문자열이 주어집니다.
출력
첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다.
예시 입력 1
a#b!GE*T@S
예시 출력 1
S#T!EG*b@a
해결
1-4 문자 뒤집기에서 썻던 방법을 응용하였다.
입력 받은 문자에서 맨 왼쪽을 lt, 맨 오른쪽을 rt로 두겠다. == int lt=0, rt = str.length()-1
그런다음 lt와 rt 가 둘다 알파벳이면 서로 교환해준다.
그리고 lt와 rt를 각각 오른쪽, 왼쪽으로 한칸씩 옮겨주면 된다.
여기서 포인트는
lt랑 rt 중 하나라도 알파벳이 아니면 그냥 각각 오른쪽, 왼쪽으로 한칸씩 옮겨주면 된다.
그럼 자동으로 알파벳이 아닌 문자는 건너뛰어 진것으로 쳐진다.
문자가 알파벳인지 확인하는 방법은
Character.isAlphabetic()을 사용한다.
Character.isAlphabetic(Char chr) : chr가 알파벳이면 True, 그렇지 않으면 False를 반환한다.
자세한 내용은 1-4 문자뒤집기에서 설명했기 때문에 생략하겠다.
CODE
import java.util.*;
public class Main {
public static 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 tem = s[lt];
s[lt] = s[rt];
s[rt] = tem;
lt++;
rt--;
}
}
answer = String.valueOf(s);
return answer;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.next();
System.out.println(solution(str));
}
}
결과
'문제 풀이 > 인프런' 카테고리의 다른 글
[JAVA11/알고리즘]1-7 회문 문자열 (0) | 2022.08.02 |
---|---|
[JAVA11/알고리즘]1-6 중복 문자 제거 (0) | 2022.08.02 |
[Java11/알고리즘] 1-4 단어 뒤집기 (0) | 2022.07.31 |
[Java11/알고리즘] 1-3 문장 속 단어 (1) | 2022.07.29 |
[JAVA11/알고리즘] 1-2 대소문자 변환 (0) | 2022.07.29 |