답: Not mine
import re
def solution(my_string):
answer = []
num_my_string = re.findall("\d", my_string)
num_my_string.sort()
for number in num_my_string:
answer.append(int(number))
return answer#이 안에 작성
문제 분석 및 해석
"""
문자, 숫자가 혼합된 문자열 my_string
해야하는 작업
- 숫자 골라내기. -> 이것 어떻게하나요
- 각각 리스트에 넣기
- 리스트 반환
문제에는 이렇게 써있지만
각각 리스트에 넣고 숫자를 골라내는게 좋을 것 같다
"""
...작성해보았지만 역시나 첫글자 h부터 오류가 난다.
my_string = "hi12392"
def solution(my_string):
my_list = list(my_string)
list_ = []
for my in my_list:
if int(my):
list_.append()
else:
None
return list_
print(solution(my_string))
이건 불가항력이지. 기능공부를 하자.
30분 고민한 후 몰라서 못 푸는 문제라면 시간낭비하지 않기로 했으니, 힌트를 보았다.
그리고 해당 기능을 자세히 배우고 써보는 시간을 가졌다.
문자열에서 문자와 정수 분리하기
정규표현식에 대한 이해가 필요한 문제.
python에서는 in / .find() / .index() 등을 활용해 문자열에서도 특정 문자나 위치를 찾을 수 있다.
하지만 문자열 안의 정수만 추출하고자 한다면
위의 함수만으로는 한계가 있어 정규표현식을 사용하는 것.
import re
re.findall('\d+’)
re 모듈에 대해 알아보자!
regex 문자열 패턴을 표현하는 일종의 형식 언어.
RegEx, RegExp라 쓴다.
파이썬의 특수 기능 문자들을 메타 문자라고 한다
메타문자 : $()*+.?[]\^{}|
** 메타문자와 같은 모양의 문자를 매칭하고자 할때는 백슬래쉬를 앞에 붙여 \(, \* 등으로 표현해야한다 **
re 모듈의 함수 알아두기
- match() : 문자열의 패턴이 일치하는지 확인하는데, 확인하고자 하는 패턴을 처음부터 순서대로 매칭한다.
1 - 12 는 매칭O, 1 - 21 은 매칭X 결과값을 가짐
- search() : match와 유사하지만 처음부터 일치하지 않아도 되고, 패턴의 일치만을 고려해 결과를 반환함
1 - 12 는 매칭O, 1 - 21 은 매칭O 결과값을 가진다
- findall() : 문자열 안에 패턴에 맞는 케이스를 찾아 리스트로 반환함
겹치는 것은 반환하지 않고, \d는 정수를 각각, \d+는 붙어있는 정수는 묶인 채로 반환한다.
=> \d는 digit(= 숫자)을 의미하는 것으로, 정규 표현식의 문자 클래스(character class) 중 하나
- finditer() : findall과 유사하지만 iterator형식으로 반환
- fullmatch() : 문자열의 시작과 끝이 정확하게 패턴과 일치할때만 반환
a - a 만 반환. a - aaa, a - aba 는 반환x
- split() : 구분자를 기준으로 리스트로 쪼개어 줌, 쪼갤 개수 지정도 가능
- sub() : 문자열에 맞는 패턴을 교체할 문자열로 교체함, 최대 교체 수 지정도 가능.
re.sub(‘a’, ‘b’, ‘abb’) #aaa반환
- subn() : sub와 동일하지만 튜플형태로 (변환한 문자열, 매칭횟수) 반환됨
- compile() : 패턴, 플래그가 동일한 정규식을 여러번 사용할때 지정하여 사용할 수 있도록 함.
c = re.compile(‘a’)
c.sub(‘b’, ‘abb’) # aaa반환
- purge() : compile 객체가 저장된 캐시를 초기화함
(100개이상이면 자동초기화지만 함수사용으로 바로 초기화할 수 있다)
- escape() : 패턴을 입력받으면 특수 문자에 백슬래쉬(이스케이프) 처리를 하고 반환
re.escape(’(a)’) # \(a\)
- search()로 패턴에 맞는 문자열을 찾았을 경우 활용 가능
- group() : 패턴에 맞는 문자열 추출 aaa
- start() : 문자열의 어디에서 부터 패턴문자가 시작되었는지 출력 1
- end() : 패턴문자가 어디까지 출력되었는지 3
- span() : 어디부터 어디까지 출력되었는지 확인 (1, 3)
이 아래는 아직 어렵당..
[참조] : https://brownbears.tistory.com/506
이제 예제를 한 줄 씩 분석해보자.
import re
def solution(my_string):
answer = []
num_my_string = re.findall("\d", my_string).num_my_string.sort()
# re모듈의 findall 함수를 사용
# 두번째 인수로들어간 my_string을 \d로 digit(숫자)를 분리해준다.
# 이후 sort()로 오름차순 정리를 해준 후 변수에 저장
# 한줄분해 =
# num_my_string = re.findall("\d", my_string)
# num_my-string = num_my_string.sort()
for number in num_my_string:
answer.append(int(number))
# 출력 결과물이 정수가 담긴 list로 출력이므로 int를 넣어 append해준다.
return answer
느낀점:
매우 유익한 공부를 했다!
아직 모르는게 태산같지만 조금씩 조금씩 알아가자
나는 언젠간 파이썬마스터가 될거야!
'알고리즘 풀이' 카테고리의 다른 글
[algorithm] 백준: 10172 강아지 (4) | 2023.04.18 |
---|---|
[algorithm] 백준: 11382 꼬마 정민, 10171 고양이 (1) | 2023.04.17 |
[algorithm] 프로그래머스: 점의 위치 구하기, 최댓값만들기 (0) | 2023.04.11 |
[algorithm] 프로그래머스: 가위바위보 (0) | 2023.04.10 |
[algorithm] 프로그래머스: 배열 뒤집기 (0) | 2023.04.07 |