CS/Data Structure & Algorithm

[String] 5. 특정 문자 뒤집기

문제

설명

영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고,

특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.

입력

첫 줄에 길이가 100을 넘지 않는 문자열이 주어집니다.

출력

첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다.

예시 입력 1 

a#b!GE*T@S

예시 출력 1

S#T!EG*b@a

 

직접 풀어보기

처음에 알파벳만 따로 추출해서 뒤집은 다음 원래 문자 배열에 재배치하려 했습니다.

하지만 배열 길이를 생각하지 못해 제대로 된 index 값을 갖지 못하는 오류가 발생했습니다.

 

풀이

1. left index가 알파벳인지 비교합니다.

2. 알파벳인 경우 right index가 알파벳인지 비교합니다.

3. 둘다 알파벳이면 문자를 서로 교환합니다.

4. left index ++, right index -- 합니다.

 

1. left index가 알파벳인지 비교합니다.

2. 알파벳이 아닌경우 left index++ 만 합니다.

3. 알파벳을 찾을 때 까지 1번 과정부터 반복합니다.

 

1. left index가 알파벳인지 비교합니다.

2. 알파벳인 경우 right index가 알파벳인지 비교합니다.

3. right index가 알파벳이 아닌경우 right index -- 합니다.

4. 알파벳을 찾을 때 까지 2번 과정부터 반복합니다.

import java.util.*;

class Main {
	public String solution(String text) {
		String answer;
		char[] t = text.toCharArray();
		int lt = 0;
		int rt = text.length() - 1;
		
		while (lt < rt) {
			if (!Character.isAlphabetic(t[lt])) lt ++;
			else if (!Character.isAlphabetic(t[rt])) rt --;
			else {
				char temp = t[lt];
				t[lt] = t[rt];
				t[rt] = temp;
				lt++;
				rt--;
			}
		}
		
		answer = String.valueOf(t);
		
		return answer;
	}
	
	public static void main(String args[]) {
		Main m = new Main();
		Scanner in = new Scanner(System.in);
		
		String text = in.next();
		System.out.println(m.solution(text));
	}
}

String 문자를 char 형태의 배열로 나누고 싶다면

객체의 toCharArray() 메서드를 사용하면 됩니다.

 

다시 String으로 합치고 싶다면

String.valueOf(text) 스태틱 메서드를 사용하면 됩니다.

 

문자 한개가 알파벳이 맞는지 아닌지 테스트하기 위해서는

Character.isAlphabetic(c) 스태틱 메서드를 사용하면 됩니다.

'CS > Data Structure & Algorithm' 카테고리의 다른 글

[String] 7. 회문 문자열  (0) 2022.09.22
[String] 6. 중복문자제거  (0) 2022.09.22
[String] 4. 단어 뒤집기  (0) 2022.08.17
[String] 3. 문장 속 단어  (0) 2022.08.13
Algorithm & Data Structure  (0) 2022.08.13