특정 문자 뒤집기
영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고, 특수문자는 자기 자리에 그대로 있는 문자열을 만들어서 출력
■ 문제 풀이
1) 입력 설명
- 첫 줄에 길이가 100을 넘지 않는 문자열이 주어진다.
2) 출력 설명
- 첫 줄에 알파벳만 뒤집힌 문자열을 출력
3)테스트
- input : kdj#@kdjg%$#kdjgk@kd$dk
- output : kdd#@kkgj%$#dkgjd@kj$dk
- input : kHSHHS#qQ!DGSG#@Sdj#@kd#g%$#kdj&&gk@kd$d#%&DGS@!DH%SQGk#
- output : kGQSHD#SG!Dddk#@kgj#@dk#g%$#dkj&&dS@GS$G#%&DQq@!SH%HSHk#
4) 문제 풀이
- 첫번째 solution에서는 String 클래스의 split() 함수를 사용하여 문자열을 자른 후, 정규표현식을 통해 영어인지 문자인지를 판별
- 두번째 solution에서는 Character 클래스의 isAlphabetic() 함수를 사용하여 문자열을 이루는 문자가 영어인지 문자인지를 판별
- 두번째 solution이 더 간결하고 가독성이 좋다.
import java.util.Scanner;
public class SpecialTurnOver {
private String solution(String input) {
String answer = "";
String[] strings = input.split("");
int lt = 0;
int rt = strings.length - 1;
while (lt < rt) {
if (strings[lt].matches("[A-Za-z]") && strings[rt].matches("[A-Za-z]")) {
String tmp = strings[lt];
strings[lt] = strings[rt];
strings[rt] = tmp;
lt++;
rt--;
} else if (strings[lt].matches("[A-Za-z]")) {
rt--;
} else if (strings[rt].matches("[A-Za-z]")) {
lt++;
} else {
lt++;
rt--;
}
}
for (String s : strings) {
answer += s;
}
return answer;
}
private String solution2(String input) {
String answer = "";
char[] chars = input.toCharArray();
int lt = 0;
int rt = chars.length - 1;
while (lt < rt) {
if (!Character.isAlphabetic(chars[lt])) {
lt++;
} else if (!Character.isAlphabetic(chars[rt])) {
rt--;
} else {
char tmp = chars[lt];
chars[lt] = chars[rt];
chars[rt] = tmp;
lt++;
rt--;
}
}
answer = String.valueOf(chars);
return answer;
}
public static void main(String[] args) {
SpecialTurnOver convertString = new SpecialTurnOver();
Scanner scanner = new Scanner(System.in);
String input = scanner.next();
System.out.println(convertString.solution(input));
System.out.println(convertString.solution2(input));
return;
}
}
'CodingTest Practice' 카테고리의 다른 글
[인프런] 회문 문자열 (0) | 2022.04.03 |
---|---|
[인프런] 중복문자제거 (0) | 2022.04.02 |
[인프런] 단어 뒤집기 (0) | 2022.03.30 |
[인프런] 문장 속 단어 (0) | 2022.03.29 |
[인프런] 대소문자 변환 (0) | 2022.03.29 |