티스토리 뷰
반응형
문제
영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고, 특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.
입력
첫 줄에 길이가 100을 넘지 않는 문자열이 주어집니다.
출력
첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다.
예시 입력
a#b!GE*T@S
예시 출력
S#T!EG*b@a
문제 풀이
[첫번째 풀이]
import java.util.Scanner;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String input = in.next();
String pattern = "^[a-zA-Z]*$";
StringBuffer english = new StringBuffer();
for (int i=0; i<input.length(); i++) {
if (Pattern.matches(pattern, String.valueOf(input.charAt(i)))) {
english.append(input.charAt(i));
}
}
english = english.reverse();
String result = "";
for (int i=0; i<input.length(); i++) {
if (Pattern.matches(pattern, String.valueOf(input.charAt(i)))) {
result += english.charAt(0);
english.deleteCharAt(0);
} else {
result += input.charAt(i);
}
}
System.out.println(result);
}
}
(Time 169ms / Memory 28MB)
import java.util.Scanner;
import java.util.regex.Pattern;
public class Main {
public String Solution(String input) {
String pattern = "^[a-zA-Z]*$";
StringBuffer english = new StringBuffer();
for (int i = 0; i < input.length(); i++) {
if (Pattern.matches(pattern, String.valueOf(input.charAt(i)))) {
english.append(input.charAt(i));
}
}
english = english.reverse();
String result = "";
for (int i = 0; i < input.length(); i++) {
if (Pattern.matches(pattern, String.valueOf(input.charAt(i)))) {
result += english.charAt(0);
english.deleteCharAt(0);
} else {
result += input.charAt(i);
}
}
return result;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String input = in.next();
Main main = new Main();
System.out.println(main.Solution(input));
}
}
(Time 175ms / Memory 27MB)
[두번째 풀이]
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String input = in.next();
StringBuffer english = new StringBuffer();
for (int i=0; i<input.length(); i++) {
if (Character.isAlphabetic(input.charAt(i))) {
english.append(input.charAt(i));
}
}
english = english.reverse();
String result = "";
for (int i=0; i<input.length(); i++) {
if (Character.isAlphabetic(input.charAt(i))) {
result += english.charAt(0);
english.deleteCharAt(0);
} else {
result += input.charAt(i);
}
}
System.out.println(result);
}
}
(Time 150ms / Memory 27MB)
import java.util.Scanner;
public class Main {
public String Solution(String input) {
StringBuffer english = new StringBuffer();
for (int i=0; i<input.length(); i++) {
if (Character.isAlphabetic(input.charAt(i))) {
english.append(input.charAt(i));
}
}
english = english.reverse();
String result = "";
for (int i=0; i<input.length(); i++) {
if (Character.isAlphabetic(input.charAt(i))) {
result += english.charAt(0);
english.deleteCharAt(0);
} else {
result += input.charAt(i);
}
}
return result;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String input = in.next();
Main main = new Main();
System.out.println(main.Solution(input));
}
}
(Time 153ms / Memory 27MB)
[세번째 풀이]
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String input = in.next();
char[] arr = input.toCharArray();
String result = "";
int left = 0;
int right = arr.length - 1;
while (left < arr.length) {
if (!Character.isAlphabetic(arr[left])) {
result += arr[left];
left++;
} else {
if (Character.isAlphabetic(arr[right])) {
result += arr[right];
left++;
}
right--;
}
}
System.out.println(result);
}
}
(Time 159ms / Memory 27MB)
import java.util.Scanner;
public class Main {
public String Solution(char[] arr) {
String result = "";
int left = 0;
int right = arr.length - 1;
while (left < arr.length) {
if (!Character.isAlphabetic(arr[left])) {
result += arr[left];
left++;
} else {
if (Character.isAlphabetic(arr[right])) {
result += arr[right];
left++;
}
right--;
}
}
return result;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String input = in.next();
char[] arr = input.toCharArray();
Main main = new Main();
System.out.println(main.Solution(arr));
}
}
(Time 156ms / Memory 27MB)
- 첫번째 풀이는 정규식을 이용해 알파벳을 걸러내는 방법을 이용했고, 두번째 풀이는 Character의 isAlphabetic 메소드를 이용했다.
- 코드를 너무 효율적을 못 짠 것 같을 때, 세번째 풀이처럼 문자열의 앞, 뒤 문자를 바꾸는 방법으로 짤 수 있다는 걸 알았다.
반응형
'Java > Coding Test' 카테고리의 다른 글
[코딩테스트] 회문 문자열 (0) | 2022.02.27 |
---|---|
[코딩테스트] 중복문자제거 (0) | 2022.02.25 |
[코딩테스트] 단어 뒤집기 (0) | 2022.02.22 |
[코딩테스트] 문장 속 단어 (0) | 2022.02.22 |
[코딩테스트] 대소문자 변환 (0) | 2022.02.21 |