티스토리 뷰

반응형

 

문제

영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고, 특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.

 

입력

첫 줄에 길이가 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
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함