728x90
반응형
5. 특정 문자 뒤집기
설명
영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고,
특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.
입력
첫 줄에 길이가 100을 넘지 않는 문자열이 주어집니다.
출력
첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다.
예시 입력 1
a#b!GE*T@S
예시 출력 1
S#T!EG*b@a
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner kb=new Scanner(System.in);
String str=kb.next();
char[] arr=str.toCharArray();
StringBuilder sb=new StringBuilder();
for(int i=0;i<arr.length;i++){
if(Character.isLetter(arr[i])){
sb.append(arr[i]);
}
}
sb.reverse();
int j=0;
for(int i=0;i<arr.length;i++){
if(Character.isLetter(arr[i])){
arr[i]=sb.charAt(j);
j++;
}
}
str=String.valueOf(arr);
System.out.println(str);
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String input1 = in.nextLine();
System.out.println(solution(input1));
}
static String solution(String s){
char[] arr = s.toCharArray();
StringBuilder sb = new StringBuilder();
for(char c: arr){
if(Character.isLetter(c)){
sb.append(c);
}
}
char[] arr2 = sb.reverse().toString().toCharArray();
int index=0;
for(int i=0;i<arr.length;i++){
if(Character.isLetter(arr[i])&&index<arr2.length){
arr[i]=arr2[index];
index++;
}
}
return String.valueOf(arr);
}
}
1. 배열의 i번째 값을 sb에 넣기
:sb.append(arr[i])
2. Char 하나하나씩 문자인지 확인
: Character.isLetter(arr[i])
3. sb에서 i번째 값 가져와서 배열에 넣기
: arr[i] = sb.charAt(j);
4. char[] -> String으로
: str=String.valueOf(arr)
5. 알파벳 확인 메서드
: Character.isAlphabetic()
+) 세련된 풀이
import java.util.*;
class Main {
public 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 tmp=s[lt];
s[lt]=s[rt];
s[rt]=tmp;
lt++;
rt--;
}
}
answer=String.valueOf(s);
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str=kb.next();
System.out.println(T.solution(str));
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String str = in.next();
String answer="";
StringBuilder sb= new StringBuilder();
for(char c: str.toCharArray()){
if(Character.isAlphabetic(c)) sb.append(c);
}
String reverse = sb.reverse().toString();
char[] arr= reverse.toCharArray();
int cnt=0;
for(char c:str.toCharArray()){
if(Character.isAlphabetic(c)) answer+=arr[cnt++];
else answer+=c;
}
System.out.println(answer);
}
}
728x90
반응형
'Java > Java 알고리즘 인프런' 카테고리의 다른 글
[Ch.01 - String] 07. 회문 문자열 (+ str.equalsIgnoreCase(tmp)) (0) | 2022.05.15 |
---|---|
[Ch.01 - String] 06. 중복문자제거 (+ charAt, indexOf) # (0) | 2022.05.15 |
[Ch.01 - String] 04. 단어 뒤집기 # (+StringBuilder) (0) | 2022.05.12 |
[Ch.01 - String] 03. 문장 속 단어 # (+ split) (0) | 2022.05.12 |
[Ch.01 - String] 02. 대소문자 변환 (+ toCharArray) (0) | 2022.05.12 |