티스토리 뷰

반응형

 

문제

문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.

만약 “tge0a1h205er”에서 숫자만 추출하면 0, 1, 2, 0, 5이고 이것을 자연수를 만들면 1205이 됩니다.

추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.

 

입력

첫 줄에 숫자가 썩인 문자열이 주어집니다. 문자열의 길이는 100을 넘지 않습니다.

 

출력

첫 줄에 자연수를 출력합니다.

 

 

 

예시 입력

g0en2T0s8eSoft

예시 출력

208

 

 

 

 

 

문제 풀이

 

[첫번째 풀이]

import java.util.Scanner;
  
public class Main {
  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();

    input = input.replaceAll("[^0-9]", "");
    System.out.println(Integer.parseInt(input) * 1);
  }
}

(Time 156ms / Memory 27MB)

import java.util.Scanner;
  
public class Main {
  public int Solution(String str) {
    str = str.replaceAll("[^0-9]", "");
    return Integer.parseInt(str) * 1;
  }
  
  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();

    Main main = new Main();
    System.out.println(main.Solution(input));
  }
}

(Time 156ms / Memory 27MB)

 

[두번째 풀이]

import java.util.Scanner;
  
public class Main {
  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();

    String result = "";
    for (char c : input.toCharArray()) {
      if (Character.isDigit(c)) {
        result += c;
      }
    }

    System.out.println(Integer.parseInt(result) * 1);
  }
}

(Time 166ms / Memory 27MB)

import java.util.Scanner;
  
public class Main {
  public int Solution(String str) {
    String result = "";
    for (char c : str.toCharArray()) {
      if (Character.isDigit(c)) {
        result += c;
      }
    }
    return Integer.parseInt(result) * 1;
  }
  
  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();

    Main main = new Main();
    System.out.println(main.Solution(input));
  }
}

(Time 162ms / Memory 27MB)

 

[세번째 풀이]

import java.util.Scanner;
  
public class Main {
  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();

    String result = "";
    for (char c : input.toCharArray()) {
      if (c >= 48 && c <= 57) {
        result += c;
      }
    }

    System.out.println(Integer.parseInt(result) * 1);
  }
}

(Time 153ms / Memory 27MB)

import java.util.Scanner;
  
public class Main {
  public int Solution(String str) {
    String result = "";
    for (char c : str.toCharArray()) {
      if (c >= 48 && c <= 57) {
        result += c;
      }
    }
    return Integer.parseInt(result) * 1;
  }
  
  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();

    Main main = new Main();
    System.out.println(main.Solution(input));
  }
}

(Time 159ms / Memory 27MB)

 

 

 

- 첫번째 풀이는 숫자 정규식을 이용해 숫자가 아닌 경우 빈값으로 치환하여 1을 곱해 자연수로 출력했다.

- 두번째 풀이는 Character의 isDigit 메소드를 이용해 숫자를 판단하는 방법을 사용했다.

- 세번째 풀이는 아스키코드를 이용해 숫자에 해당하는 48~57번에 해당하면 숫자로 판단하는 방법을 사용했다.

- Character의 isDigit 메소드를 이용하는 방법 보다는 아스키코드를 이용한 방법이 시간 단축에 더 도움이 되는 듯 하다.

 

 

 

 

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함