코딩테스트/PYTHON

[프로그래머스][PYTHON] Lv. 0 옹알이 (1)

_알파카 2024. 4. 5. 15:49
728x90

문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/120956

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 풀이

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] 정규표현식 메타 문자

2024.02.02 - [PYTHON] - [PYTHON] 정규표현식 활용하기 [PYTHON] 정규표현식 활용하기 정규표현식이란? 정규표현식(Regular expressions)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어

yeonnys.tistory.com

 

728x90