데이터분석 기록일지

문제풀이/프로그래머스

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

야하루 2024. 8. 7. 23:21

코딩테스트 연습 - 옹알이 (2) | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

문제

머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다.
문자열 배열  babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

 

 

제한사항

1 ≤ babbling의 길이 ≤ 100
1 ≤ babbling[i]의 길이 ≤ 30
문자열은 알파벳 소문자로만 이루어져 있습니다.

 

 

입출력 예
babbling result
["aya", "yee", "u", "maa"] 1
["ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"] 2

 

 

 

 


풀이

 

아이디어 :
첫번째로 4개의 발음을 반복하여 말하는 단어를 조건으로 걸어서 필터링 해준다.
반복하여 말하지 않는 단어라면, 그 단어가 4개의 단어로만 이루어졌는지 확인하기 위해서 replace를 사용한다.
4개의 단어 각각을 순회하면서 replace로 바꿔주면서 마지막에 남은 알파벳이 있는지 확인해준다.

 

def solution(babbling):
    words = [ "aya", "ye", "woo", "ma"]
    answer = 0
    for i in babbling:
    	# 반복헤서 발음하는지 확인하기 위해 조건을 걸어준다.
        if any(saying*2 in i for saying in words):
            continue
        else:
        	# 말할 수 있는 4개의 단어 각각을 순회
            for word in words:
            	# 각각의 단어를 공백으로 대체해준다.(replace는 기본적으로 해당하는 모든 문자를 대체)
                i=i.replace(word,' ')
            # 단어 순회가 끝났으면 공백을 다시 제거해준다.
            i=i.replace(" ",'')
            # 길이가 0이라면 4개의 단어로만 이루어진 것이고,
            # 다른 알파벳이 1개라도 남았다면 다른 단어가 포함된것이다.
            if len(i)==0:
                answer+=1
    return answer

 

이때 처음에는 replace를 공백으로 대체해 주지 않고 바로 빈칸으로 삭제했더니, 테스트케이스 절반이 실패였다.

알고보니 "yayae" 이런 단어 같은 경우에는, 단어를 처음부터 삭제한다면 중간에 "aya" 가 지워지고 "ye"가 남게 되어 이것 또한 지워져서 발음할 수 없는 단어를 발음할 수 있다고 잘못 판단하게 된다.

따라서 처음부터 단어를 삭제하지 않고 공백으로 대체하여서, 남겨진 알파벳이 우연히 단어와 일치한다고 해서 삭제되지 않게 해주었다.