새소식

Problem solving/문제 풀이 - 2023.01.24

[파이썬] 프로그래머스 옹알이 (2) 풀이

  • -

문제 확인

 

프로그래머스

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

programmers.co.kr

나의 풀이

  • 문자열을 완전 탐색해 정해진 패턴을 찾는 방식으로 문제를 풀었다.
  • 이전 패턴과 겹치는지 여부를 확인하기 위해서 idx를 활용했다.
def solution(babbling):
    answer = 0
    for bab in babbling:
        # 비교할 문자열
        temp_c = ""
        # 이전에 나온 단어 확인
        prev_idx = -1
        for c in bab:
            temp_c +=c
            # 못 찾은 경우 중단
            if len(temp_c) > 4:
                break
            # 체크 시작
            for idx, word in enumerate(["aya", "ye", "woo", "ma"]):
                is_found = temp_c.find(word)
                # 이전 단어와 겹치지 않도록 찾은 경우
                if is_found == 0 and prev_idx != idx:
                    prev_idx = idx
                    temp_c = ""
        # 체크 성공
        if not temp_c:
            answer += 1
    return answer

다른 사람 풀이

  • 문자열 함수를 활용
    • 이전 패턴과 겹치지 않는다면 문자열을 공백으로 변경한다.
    • " "(공백) 대신 ""으로 변경할 경우, 가운데 글자가 없어지면서 매칭될 수 있다.
def solution(babbling):
    answer = 0
    for i in babbling:
        for j in ['aya','ye','woo','ma']:
            if j*2 not in i:
                i=i.replace(j,' ')
        if not i.rstrip():
            answer +=1
    return answer
  • 정규 표현식 활용
    • () : 그룹 지정
    • [] : 문자 지정
    • \1~9 : 지정된 그룹 참조
import re

def solution(babbling):
    answer = 0
    # () : 그룹 지정, \1 : 캡쳐된 그룹 참조
    re_pt1 = r"(aya|ye|woo|ma)\1+"
    re_pt2 = r"^(aya|ye|woo|ma)+$"
    for i in babbling:
        if not re.search(re_pt1, i) and re.search(re_pt2, i):
            answer += 1
    return answer

 


참고

 

프로그래머스 Lv.1 : 옹알이 (2)

문제 프로그래머스 문제 내 풀이 이것도 처음에 똑바로 풀었다고 생각했는데 자꾸 몇 개 테스트 케이스를 못 통과해서 힘들었다. 알고보니 테스트 케이스가 "mayaa"일 때 맨 처음에 "aya" -> ""로 대

velog.io

 

Python, Machine & Deep Learning

Python, Machine Learning & Deep Learning

greeksharifa.github.io

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.