[Java알고리즘] 5. 특정 문자 뒤집기

진주·2022년 3월 9일
0

Java알고리즘

목록 보기
3/10

🌼 Problem


🍔 Solution1

import java.util.Scanner;

public class Main {

    public static String Solution(String str) {
			
        // 입력받은 String을 char[] 배열로 변경
        char[] arr = str.toCharArray();
        
        // lt = 문자 시작 index	, rt = 문자 끝 index
        int lt = 0;
        int rt = arr.length -1;

        while( lt < rt ){
        
            // 특수기호인 경우, index 변경
            if(String.valueOf(arr[lt]).matches("[^a-zA-Z0-9\\s]") ){
                lt++;
            }else if(String.valueOf(arr[rt]).matches("[^a-zA-Z0-9\\s]")){
                rt--;
            }else {
            	// index가 lt, rt가 모두 특수문자가 아닐 때 실행
                char tmp = arr[lt];
                arr[lt] = arr[rt];
                arr[rt] = tmp;
                lt ++;
                rt --;
            }
        }
        // arr는 char[]이므로 String으로 변환해주는 String.valueOf() 함수 사용
        String tmp = String.valueOf(arr);
        return tmp;

    }


    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        String input1 = in.next();

        System.out.println(Solution(input1));
    }
}

🍔 Solution2

import java.util.Scanner;

public class Main {
    
    public static String Solution(String str){
        String answer;

        // 인자로 입력받은 String을 char[] 배열로 변환
        char[] s = str.toCharArray();
        int lt = 0;

        // rt = right의미, str.length()-1을 해주는 이유?
        // ex) good, str.length() = 4이지만, good의 index는 0부터 시작하므로
        // -1을 해주지 않으면 존재하지 않는 index까지 검사를 하게 된다.
        int rt = str.length()-1;

        while( lt < rt ){
            // Character 클래스의 isAlphabetic() : 알파벳인지 알려준다.
            if(!Character.isAlphabetic(s[lt])){
                lt++; // 알파벳이 아닌경우 = 특수기호인 경우, 아무런 처리 x
            }else if(!Character.isAlphabetic(s[rt])){
                rt--; // 알파벳이 아닌경우 = 특수기호인 경우, 아무런 처리 x
            }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){
        Scanner in=new Scanner(System.in);
        String input1 = in.next();

        System.out.println(Solution(input1));

    }
}

🍬 알아두기

  1. matches를 이용하면 정규식을 만들 수 있다.
  • [^a-zA-Z0-9] : 공백도 특수 문자로 인식한다.
  • [^a-zA-Z0-9\\s] : 공백은 특수 문자로 인식하지 않는다.
  1. String.valueOf(char) : char을 String으로 변환

  2. Character.isAlphabetic() : 알파벳인지 여부를 알려준다

profile
진주의 코딩일기

0개의 댓글

관련 채용 정보