문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/120956
내 풀이
def solution(babbling):
words = ["aya", "ye", "woo", "ma"]
for b in range(len(babbling)):
for w in words:
# 단어가 포함되면 빈칸으로 바꿈
babbling[b] = babbling[b].replace(w, ' ')
# 모든 빈칸을 없애서 연결지음
babbling[b] = babbling[b].replace(' ', '')
# 공백은 발음할 수 있는 단어이므로 공백의 개수를 반환함
return babbling.count('')
간단하게 풀어보았다.
먼저, 발음할 수 있는 단어 리스트를 만들고,
문자열 배열을 각각 순회하며,
각 단어가 발음할 수 있는 단어에 포함되어 있는지 확인한다.
즉, 주어진 단어 중 발음할 수 있는 단어가 포함되면 그 부분을 공백이 들어간 빈칸으로 바꾼다.
예를 들어
wyeoo 단어에서 ye를 공백이 포함된 단어로 바꾸지 않으면..
wyeoo -> ye를 빈칸으로 변경 -> woo가 됨 -> woo가 또 삭제됨 -> 원하는 결과가 아님!!
위를 방지하기 위해
wyeoo -> ye를 공백이 포함된 빈칸으로 변경 -> w oo로 변경 -> woo가 또 삭제되지 않음!
위와 같이 변경하면, 발음할 수 있는 단어들은 ' '으로 변경된다.
이 후, ' '을 모두 ''(공백이 없는 빈칸)으로 변경한 후,
그 개수를 반환한다.
다른 사람 풀이
[코드 1]
import re
def solution(babbling):
regex = re.compile('^(aya|ye|woo|ma)+$')
cnt=0
for e in babbling:
if regex.match(e):
cnt+=1
return cnt
정규표현식을 사용한 풀이이다.
처음에는 나도 정규표현식을 사용하고 싶었는데, 여러 개를 어떻게 표현할지 몰라서 안썻다.
정규표현식을 통해 주어진 배열 중 발음할 수 있는 단어를 찾고, 그 개수를 센다.
💡 새로 알게된 점
re.compile('^(aya|ye|woo|ma)+$')
정규표현식에서..
^ : 문자열의 제일 처음과 매치
-> 문자열이 ^의 뒤에 있는 문자로 시작되면 매치된다.
$ : 문자열의 제일 마지막과 매치
-> 문자열이 $의 앞에 있는 문자로 끝나면 매치된다.
| : 여러 개의 표현식 중 하나
-> 여러 개의 정규표현식들을 |로 구분하면 or의 의미가 적용된다.
+ : 최소 한 번 이상 반복
-> + 앞의 문자가 최소 한 번 이상 반복되어야 매치된다.
* : * 앞에 오는 문자가 0개를 표현하여 몇 개가 오든 모두 매치된다.
? : ? 앞에 문자가 없거나 하나 있을 때 매치된다.
++ 관련된 내용을 글로 따로 정리해두었다!
2024.04.05 - [PYTHON] - [PYTHON] 정규표현식 메타 문자
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 0 문자열 밀기 (0) | 2024.04.11 |
---|---|
[프로그래머스][PYTHON] Lv. 0 겹치는 선분의 길이 (0) | 2024.04.09 |
[프로그래머스][PYTHON] Lv. 0 평행 (0) | 2024.04.03 |
[프로그래머스][PYTHON] Lv. 0 연속된 수의 합 (0) | 2024.04.02 |
[프로그래머스][PYTHON] Lv. 0 다음에 올 숫자 (0) | 2024.04.02 |