인프런의 자바(Java)알고리즘 문제풀이 입문:코딩테스트 대비 강좌의 강의를 보고 문제 해설을 작성해보았습니다.
섹션1. String(문자열)의 5. 특정 문자 뒤집기 강의편 입니다.
설명
영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고,
특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.
입력
첫 줄에 길이가 100을 넘지 않는 문자열이 주어집니다.
출력
첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다.
import java.util.Scanner;
public class 특정_문자_뒤집기 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
solution(str);
}
public static void solution(String str) {
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--;
}
}
String ans = String.valueOf(s);
System.out.println(ans);
}
}
>>해설
Scanner 객체로 문자열을 입력 받고 solution() 메서드를 호출하여 str 매개변수를 전달합니다.
문자열을 한자리씩 특수 문자인지 비교하기 위해 toCharArray()를 이용하여 캐릭터 타입의 배열로 변환시켜줍니다.
lt 변수는 앞자리부터 인덱스 역할을 할 0을 넣어주고 rt에는 뒷자리부터 인덱스 역할을 하기 위해서 문자열 길이에서 1을 뺀 값을 넣어줍니다.
lt가 rt보다 작을 동안
문자열이 특수문자인지 비교하기 위해 Character.isAlphabetic()메서드를 이용하여 앞에서 부터 알파벳이 아니면 lt 값을 증가,
뒤에서 부터 알파벳이 아니면 rt를 감소시킵니다.
둘다 아닐 경우(알파벳일 경우) lt 인덱스 값에 들어 있는 값과 rt 인덱스에 들어있는 값을 교환합니다.
이어서 lt값은 증가, rt값은 감소시킵니다.
최종적으로 캐릭터 타입의 배열을 문자열로 변환시킨 뒤 출력합니다.
'Computer Science > Algorithm' 카테고리의 다른 글
| [Inflearn] 회문 문자열 (0) | 2022.11.04 |
|---|---|
| [Inflearn] 중복 문자 제거 (0) | 2022.11.02 |
| [Inflearn] 단어 뒤집기 (0) | 2022.10.30 |
| [Inflearn] 문장 속 단어 (0) | 2022.10.28 |
| [Inflearn] 대소문자 변환 (0) | 2022.10.24 |