2024. 8. 19. 18:00ㆍ코딩테스트 입문
https://school.programmers.co.kr/learn/courses/30/lessons/120864
문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 1,000
- 1 ≤ my_string 안의 자연수 ≤ 1000
- 연속된 수는 하나의 숫자로 간주합니다.
- 000123과 같이 0이 선행하는 경우는 없습니다.
- 문자열에 자연수가 없는 경우 0을 return 해주세요.
입출력 예
my_string | result |
"aAb1B2cC34oOp" | 37 |
"1a2b3c4d123Z" | 133 |
입출력 예 설명
입출력 예 #1
- "aAb1B2cC34oOp"안의 자연수는 1, 2, 34 입니다. 따라서 1 + 2 + 34 = 37 을 return합니다.
입출력 예 #2
- "1a2b3c4d123Z"안의 자연수는 1, 2, 3, 4, 123 입니다. 따라서 1 + 2 + 3 + 4 + 123 = 133 을 return합니다.
문자열의 숫자를 찾는데, 이전과는 다르게 연속된 숫자들은 하나의 숫자로 취급하는 문제입니다.
이런 문제들을 볼 때마다 split 함수와 정규식을 같이 사용하면 참 좋을 것 같더라고요.
re 패키지에서 사용하는 re.split(regex, list)는 regex를 기준으로 리스트를 분리를 해줍니다.
이 문제같은 경우에는 숫자들과 영대소문자가 섞여있는데, 그러면 영대소문자를 기준으로 분리를 해주면 되겠죠.
파이썬으로 문제를 풀어보겠습니다.
import re
def solution(my_string):
# 영어 문자(대소문자)를 기준으로 분리
result = re.split('[A-Za-z]+', my_string)
# 빈 문자열 제거
result = sum(int(x) for x in result if x)
return result
정규식을 사용하기 위해 re 패키지를 불러옵니다.
불러온 re 패키지의 split(regex, list) 구조를 사용해서 정규식을 기준으로 my_string을 분리합니다.
[A-Za-z]+에서 A-Za-z 1) A부터 Z까지 2) a부터 z까지 를 의미합니다.
[xy]는 x 또는 y를 의미하는데, [A-Za-z]는 영대소문자를 모두 포함하는 걸 의미하죠.
+는 반복을 의미하는데, [A-Za-z]+는 [A-Za-z]가 한 번 이상 반복되는 것을 의미합니다.
한 줄로 요약하자면, 영대소문자가 1글자 이상인 값을 정규식으로 표현한 겁니다.
result는 my_string을 regex를 기준으로 분리한 결과입니다.
이 리스트에는 빈 문자열들이 섞여있기 때문에, 빈 문자열들을 제거하고 int로 형변환해줍니다.
형변환된 리스트에 sum을 적용하면 더한 값을 얻을 수 있습니다.
연속된 숫자같은 문제들은 숫자가 나왔을 때 뒤의 값이 숫자인지 확인하는 로직으로도 구성할 수 있겠지만, 정규식을 이용하면 더 편하게 풀 수 있습니다.
'코딩테스트 입문' 카테고리의 다른 글
삼각형의 완성조건 (2) (0) | 2024.08.21 |
---|---|
안전지대 (0) | 2024.08.20 |
다항식 더하기 (0) | 2024.08.18 |
최댓값 만들기 (2) (0) | 2024.08.17 |
캐릭터의 좌표 (0) | 2024.08.16 |