JAVA/프로그래머스 코딩테스트 입문

[프로그래머스, LV.0] 숨어있는 숫자의 덧셈 (2)

sundori 2024. 12. 10. 16:45

목차

     

    문제 설명

    문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.


    제한사항

    • 1 ≤ my_string의 길이 ≤ 1,000
    • 1 ≤ my_string 안의 자연수 ≤ 1000
    • 연속된 수는 하나의 숫자로 간주합니다.
    • 000123과 같이 0이 선행하는 경우는 없습니다.
    • 문자열에 자연수가 없는 경우 0을 return 해주세요.
    class Solution {
        public int solution(String my_string) {
            int sum = 0;
            // 정규식으로 숫자 추출
            String[] numbers = my_string.split("[^0-9]+");
    
            for (String num : numbers) {
                if (!num.isEmpty()) { // 공백 문자열 방지
                    sum += Integer.parseInt(num);
                }
            }
            return sum;
        }
    }

     

     

    정규식 기반 숫자 추출

    String[] numbers = my_string.split("[^0-9]+");

     

    • my_string.split("[^0-9]+"): 문자열을 특정 기준으로 분리(split)한다.
    • [0-9]: 숫자(0~9)를 의미한다.
    • [^0-9]: 숫자가 아닌 문자(non-digit)를 의미한다. 앞에 ^가 붙어 부정(Not)을 나타낸다.
    • [0-9]+: 한 번 이상 연속된 숫자를 의미한다. +는 최소 1번 이상 연속되는 패턴을 나타낸다.
    • [^0-9]+: 숫자가 아닌 문자들이 한 번 이상 연속된 부분을 분리 기준으로 삼는다.
    • 결과: 숫자가 아닌 부분을 기준으로 문자열을 잘라 배열로 반환한다.

    예를 들어:

    • my_string = "aAb1B2cC34oOp"
      • 숫자가 아닌 부분: "aAb", "B", "cC", "oOp"
      • 숫자만 남으면: "1", "2", "34"

     

    정규표현식(Regular Expression) 상세 설명

    1. 정규표현식이란?
      • 특정 패턴을 정의하고 이 패턴에 따라 문자열을 검색하거나 변환하는 데 사용되는 표현식이다.
      • 다양한 프로그래밍 언어에서 문자열 작업을 단순화하고 효율적으로 처리하는 데 사용된다.
    2. 패턴 요소 설명
      • [0-9]: 숫자 0~9 중 하나를 의미.
      • [^0-9]: 숫자를 제외한 모든 문자를 의미.
      • [0-9]+: 한 번 이상 연속된 숫자(숫자로 구성된 자연수)를 의미.
      • [^0-9]+: 숫자가 아닌 문자들이 한 번 이상 연속된 부분을 의미.
    3. 활용
      • split("[^0-9]+"): 숫자가 아닌 문자들로 문자열을 나눈다.
      • replaceAll("[^0-9]", ""): 숫자가 아닌 문자들을 모두 제거한다.

    실행 예시

    입력: "aAb1B2cC34oOp"

    1. split 수행
      • my_string.split("[^0-9]+") 결과: ["", "1", "2", "34", ""]
    2. 배열 순회
      • ""는 무시
      • "1" → sum = 1
      • "2" → sum = 3
      • "34" → sum = 37
    3. 최종 반환값
      • 37

    입력: "1a2b3c4d123Z"

    1. split 수행
      • my_string.split("[^0-9]+") 결과: ["1", "2", "3", "4", "123"]
    2. 배열 순회
      • "1" → sum = 1
      • "2" → sum = 3
      • "3" → sum = 6
      • "4" → sum = 10
      • "123" → sum = 133
    3. 최종 반환값
      • 133

     

    728x90