개발놀이터

1-9. 숫자만 추출 본문

기타/코딩테스트

1-9. 숫자만 추출

마늘냄새폴폴 2023. 2. 9. 12:14

package string.ExtractionNumber19.my;

import java.util.Scanner;

public class Main {

    /**
     * -내 풀이-
     * replaceAll 메서드를 이용해 정규표현식으로 숫자가 아닌 것들을 빈칸으로 바꿔 숫자만 뽑았다.
     *
     * --피드백--
     * IDEA 의 도움을 받아버렸다... 실전에서였으면 해결하기 쉽지 않았을 문제
     *
     * --선생님의 풀이--
     * 1. answer = 0 으로 초기화 후 String -> toCharArray 로 바꾸고 각각의 문자를 아스키코드로 48 ~ 57 로 설정하여
     * for (char x : str.toCharArray()) {
     *     if (x >= 48 && x <= 57) {
     *         answer = answer * 10 + (x - 48);  (여기서 x 는 각각의 숫자)
     *     }
     * }
     * return answer;
     * 이렇게 숫자로 계산
     *
     * 2. Character 클래스의 isDigit() 메서드를 이용해 숫자인지 아닌지 확인하고 숫자만 하나씩 누적하는 방식
     * String answer = "";
     * for (char x : str.toCharArray()) {
     *     if (Character.isDigit(x)) {      // isDigit() 메서드는 해당 문자가 숫자인지 아닌지 확인하는 메서드
     *         answer += x;
     *     }
     * }
     * return Integer.parseInt(answer);
     */

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

        System.out.println(solution(input));
    }

    private static int solution(String input) {
        if (input.length() > 100) {
            throw new StringOrNumberFormatException("100자를 넘길 수 없습니다.");
        }

        input = input.replaceAll("\\D", "");

        if (input.equals("")) {
            throw new StringOrNumberFormatException("반드시 숫자가 하나 이상 있어야 합니다.");
        }

        if (Long.parseLong(input) > 100000000) {
            throw new StringOrNumberFormatException("숫자로 변환된 값은 1억을 넘을 수 없습니다.");
        }

        return Integer.parseInt(input);
    }

    static class StringOrNumberFormatException extends RuntimeException {
        public StringOrNumberFormatException() {
            super();
        }

        public StringOrNumberFormatException(String message) {
            super(message);
        }

        public StringOrNumberFormatException(String message, Throwable cause) {
            super(message, cause);
        }

        public StringOrNumberFormatException(Throwable cause) {
            super(cause);
        }

        protected StringOrNumberFormatException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
            super(message, cause, enableSuppression, writableStackTrace);
        }
    }
}

 

package string.ExtractionNumber19.teacher;

import java.util.Scanner;

public class Main {

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

        System.out.println(solution(str));
    }

    private static int solution(String str) {
        String answer = "";

        for (char x : str.toCharArray()) {
            if (Character.isDigit(x)) {
                answer += x;
            }
        }

        return Integer.parseInt(answer);

        /*
        int answer = 0;

        for (char x : str.toCharArray()) {
            if (x >= 48 && x<= 57) answer = answer * 10 + (x - 48);
        }

        return answer;
        */
    }
}

'기타 > 코딩테스트' 카테고리의 다른 글

1-11. 문자열 압축  (0) 2023.02.09
1-10. 가장 짧은 문자 거리  (0) 2023.02.09
1-8. 유효한 회문 문자열  (0) 2023.02.09
1-7. 회문 문자열  (0) 2023.02.09
1-6. 중복된 문자 제거  (0) 2023.02.07