CodingTest/Programmers

숨어있는 숫자의 덧셈(1) [프로그래머스 코딩테스트 입문]

Hojung7 2025. 3. 5. 10:39

문제 설명

 

문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.


 

 제한 사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.

 

 

 입출력 예

my_string result
"aAb1B2cC34oOp" 10
"1a2b3c4d123" 16

 

 

 

 입출력 예 설명

 

입출력 예 #1
"aAb1B2cC34oOp"안의 한자리 자연수는 1, 2, 3, 4 입니다. 따라서 1 + 2 + 3 + 4 = 10 을 return합니다.


입출력 예 #2
"1a2b3c4d123Z"안의 한자리 자연수는 1, 2, 3, 4, 1, 2, 3 입니다. 따라서 1 + 2 + 3 + 4 + 1 + 2 + 3 = 16 을 return합니다.

 

유의사항
연속된 숫자도 각각 한 자리 숫자로 취급합니다.

 

 

 풀이

 

📌정규표현식(Regular Expression)

- 문자열에서 특정 패턴을 찾거나, 추출하거나, 변환할 때 사용하는 도구

- Pattern 클래스와 Matcher 클래스를 사용하여 처리

 

○ 기본 정규표현식 문법

정규표현식 의미 예제 결과
\d 숫자(0~9) 한 개 "abc123" "1", "2", "3"
\D 숫자가 아닌 문자 "abc123" "a", "b", "c"
\w 문자 + 숫자 ([a-zA-Z0-9_]) "abc_123!" "a", "b", "c", "_", "1", "2", "3"
\W 문자 + 숫자가 아닌 문자 "abc_123!" "!"
\s 공백 문자 (스페이스, 탭, 개행) "Hello World" " "
\S 공백이 아닌 문자 "Hello World" "H", "e", "l", "l", "o", "W", "o", "r", "l", "d"

 

● 반복 문자

정규표현식 의미 예제 결과
\d+ 하나 이상의 숫자 (1개 이상) "abc123" "123"
\d* 0개 이상 숫자 "abc123" "", "123"
\d? 숫자가 0개 또는 1개 "a1b23" "1", "", "2", "3"
\d{3} 정확히 3자리 숫자 "12345" "123"
\d{2,4} 2~4자리 숫자 "12345" "1234"

 

 


 

1. 정규표현식(Regex)을 사용하기 위해 Pattern과 Matcher을 import 해줍니다

 

2. 정규표현식 패턴을 컴파일 해서 Pattern 객체를 만들어줍니다. 

//d : 숫자 한개(0-9)를 찾는 정규식

※ \d는 정규표현식에서 숫자를 의미하는데, Java에서 \는 특수 문자라서 \\d로 작성해야 함.

 

3. my_string에서 pattern(\\d)을 찾을 수 있도록 Matcher 객체를 생성해줍니다.

 

4. 찾을 수 있는 모든 숫자를 탐색하기 위해 while문을 사용해줍니다.

(my_string에서 일치하는 값을 찾으면 true 반환)

 

5. matcher가 찾은 문자열을 정수로 변환한 뒤 변환된 숫자를 sum에 더해줍니다. 

 

6. 결과 모든 숫자를 더한 sum을 반환해줍니다.

import java.util.regex.Pattern;
import java.util.regex.Matcher;

class Solution {
    public int solution(String my_string) {
        int sum = 0;
        Pattern pattern = Pattern.compile("\\d");
        Matcher matcher = pattern.matcher(my_string);
        
        while(matcher.find()){
            sum += Integer.parseInt(matcher.group());
        }
        
        return sum;
    }
    
}