본문 바로가기

CodingTest Practice

[인프런] 숫자만 추출

숫자만 추출

문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만드는 프로그램을 작성

 

■ 문제 풀이

1) 입력 설명
- 첫 줄에 숫자가 적인 문자열이 주어진다.
- 문자열의 길이는 100을 넘지 않는다.

2) 출력 설명
- 첫 줄에 자연수를 출력한다.

3) 테스트
- input : g0en2T0s8eSoft / output : 208
- input : tge0a1h205er / output : 1205
- input : Akdj0Gk1dgdgdAGSGAG3DGGA45GAGADGDGdjADG2SDGkdj0f / output : 134520 

4) 문제 풀이
- 첫 번째 solution에서는 정규표현식을 사용하여 숫자인 값만 추출
- 두번째 solution에서는 숫자의 아스키코드 값을 이용하여 숫자를 추출
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {


    private int solution(String str) {
        StringBuilder sb = new StringBuilder();

        String regex = "[0-9]";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);

        while (matcher.find()) {
            sb.append(matcher.group());
        }

        return Integer.parseInt(sb.toString());
    }


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

        String str = in.next();
        System.out.println(main.solution(str));

    }
}

 

import java.util.Scanner;

public class Main {


    private int solution(String input) {
        int answer = 0;

        /**
         * 숫자의 아스키코드 값을 이용하여 문제 해결
         * 0의 아스키코드 값 : 48
         * 9의 아스키코드 값 : 57
         */
        for (char c : input.toCharArray()) {
            if (c >= 48 && c <= 57) {
                answer = (answer * 10) + (c - 48);
            }
        }
        return answer;
    }


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

        String str = in.next();
        System.out.println(main.solution(str));
    }
}

 

 

'CodingTest Practice' 카테고리의 다른 글

[인프런] 큰 수 출력하기  (0) 2022.04.11
[인프런] 가장 짧은 문자 거리  (0) 2022.04.05
[인프런] 유효한 팰린드롬  (0) 2022.04.03
[인프런] 회문 문자열  (0) 2022.04.03
[인프런] 중복문자제거  (0) 2022.04.02