본문 바로가기

Java/Java 알고리즘 인프런

[Ch.01 - String] 05. 특정 문자 뒤집기 (+ isAlphabetic)

반응형
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);
  }
}
반응형