DataScience
[LV0] 숨어있는 숫자의 덧셈 (2) - Python 본문
문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
제한 사항
- 1 ≤ my_string의 길이 ≤ 1,000
- 1 ≤ my_string 안의 자연수 ≤ 1000
- 연속된 수는 하나의 숫자로 간주합니다.
- 000123과 같이 0이 선행하는 경우는 없습니다.
입출력 예#1
"aAb1B2cC34oOp"안의 자연수는 1, 2, 34 입니다. 따라서 1 + 2 + 34 = 37 을 return합니다.
입출력 예#2
"1a2b3c4d123Z"안의 자연수는 1, 2, 3, 4, 123 입니다. 따라서 1 + 2 + 3 + 4 + 123 = 133 을 return합니다.
입출력 예시
풀이 및 코드 리뷰
내가 제출한 답 (오답)
import re
def solution(my_string):
answer = list(map(int, re.findall(r'\d+', my_string)))
return sum(answer)
- 처음에 숫자를 isdigit으로 구분하는것 까지는 할수 있었으나 2자리 숫자 이상부터는 어떻게 해야될지 감이 안와서 정규표현식으로 한번 해볼 결과 잘 구동하는것을 확인 할수 있었다. 하지만 정규표현식을 사용해본적이 없어서 한번더 공부가 필요하다.
다른 사람의 풀이1 (정규표현식 사용)
import re
# 1번 방법
def solution(my_string):
answer = list(map(int, re.findall(r'\d+', my_string)))
return sum(answer)
# 2번 방법
def solution(my_string):
return sum([int(i) for i in re.findall(r'[0-9]+', my_string)])
- re 모듈을 사용하여 정규표현식을 사용하였다.
- re 모듈중 모든 매치를 찾아 리스트로 변환하는 findall 함수를 사용하였으며
- 매치의 경우 모든 숫자를 표현하는 r"[0-9]+"의 방식과 r"\d+" 2가지 방식이 존재한다.
- 최종적으로 각 문자를 더해주기 위하여 리스트 컴프리 헨션 방식을 사용하여 더해주거나
- map을 사용하여 int로 만들고 list로 바꾼 다음 합치는 방식이 존재한다.
다른 사람의 풀이2 (리스트 컴프리헨션 / isdigit() 사용)
# 1번 방법
def solution(my_string):
s = ''.join(i if i.isdigit() else ' ' for i in my_string)
return sum(int(i) for i in s.split())
# 2번 방법
def solution(my_string):
my_string = ''.join([s if s.isdigit() else ' ' for s in my_string])
return sum(list(map(int, my_string.split())))
- 이 방식의 경우 처음에 생각했던 방식이였으나 if else을 리스트 컴프리 헨션에서 어떻게 사용할지 몰라서 일단 보류했던 방식이다. if else를 리스트 컴프리헨션에 사용하려면 [True if 조건 else False for i in ㅇㅇ]와 같은 방식을 사용해야 한다.
참고 자료
1. 정규표현식 : 특정한 규칙을 가진 문자열의 집합을 표현하는 형식 언어
nachwon님의 정규표현식에 대한 더 자세한 설명과 예시가 있으니 확인
[Python 문법] 정규표현식 (Regular Expressions)
정규표현식에 대해 알아보고 Python으로 정규표현식을 사용하는 방법에 대해 알아본다.
nachwon.github.io
3. if-else 방식의 리스트 컴프리헨션
- if문은 for문의 오른쪽, if-else문은 for문의 왼쪽에 사용한다는 점
a = [1,2,3,4,5,6,7,8]
a = [i if i >= 5 else 0 for i in a]
a
>>> [0, 0, 0, 0, 5, 6, 7, 8]
3. isidgit()
- "문자열".isdigit() : 숫자로만 이루어져있다면 True, 숫자로만 이루어져 있지 않다면 False
- 0과 양의 정수만 확인이 가능하며 음수와 실수는 확인이 불가능하다.
str_num = "12345"
str_alpha = "abcde"
str_num.isdigit()
>>> True
str_alpha.isdigit()
>>> False
'Coding Review > programmers' 카테고리의 다른 글
[LV1] 이상한 문자 만들기- Python (0) | 2022.10.14 |
---|---|
[LV1] 최대공약수와 최소공배수 - Python (1) | 2022.10.13 |
[LV2] 위장 - python (해시) (2) | 2022.10.05 |
[LV1] 완주하지 못한 선수 - Python(해시) (0) | 2022.10.04 |
[LV0] 중복된 문자 제거 - Python (0) | 2022.10.04 |