목차
문제 설명
문자열 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) 상세 설명
- 정규표현식이란?
- 특정 패턴을 정의하고 이 패턴에 따라 문자열을 검색하거나 변환하는 데 사용되는 표현식이다.
- 다양한 프로그래밍 언어에서 문자열 작업을 단순화하고 효율적으로 처리하는 데 사용된다.
- 패턴 요소 설명
- [0-9]: 숫자 0~9 중 하나를 의미.
- [^0-9]: 숫자를 제외한 모든 문자를 의미.
- [0-9]+: 한 번 이상 연속된 숫자(숫자로 구성된 자연수)를 의미.
- [^0-9]+: 숫자가 아닌 문자들이 한 번 이상 연속된 부분을 의미.
- 활용
- split("[^0-9]+"): 숫자가 아닌 문자들로 문자열을 나눈다.
- replaceAll("[^0-9]", ""): 숫자가 아닌 문자들을 모두 제거한다.
실행 예시
입력: "aAb1B2cC34oOp"
- split 수행
- my_string.split("[^0-9]+") 결과: ["", "1", "2", "34", ""]
- 배열 순회
- ""는 무시
- "1" → sum = 1
- "2" → sum = 3
- "34" → sum = 37
- 최종 반환값
- 37
입력: "1a2b3c4d123Z"
- split 수행
- my_string.split("[^0-9]+") 결과: ["1", "2", "3", "4", "123"]
- 배열 순회
- "1" → sum = 1
- "2" → sum = 3
- "3" → sum = 6
- "4" → sum = 10
- "123" → sum = 133
- 최종 반환값
- 133
728x90
'JAVA > 프로그래머스 코딩테스트 입문' 카테고리의 다른 글
[프로그래머스, LV.0] 한 번만 등장한 문자 (0) | 2024.12.10 |
---|---|
[프로그래머스, LV.0] 가까운 수 (0) | 2024.12.10 |
[프로그래머스, LV.0] 팩토리얼 (0) | 2024.12.10 |
[프로그래머스 LV.0] 진료 순서 정하기 (0) | 2024.12.10 |
[프로그래머스 LV.0] 중복된 문자 제거 (1) | 2024.12.10 |