[Programmers][Py] 옹알이 (2)

mj·2024년 8월 29일
0

코딩테스트문제

목록 보기
48/65

✅ 문제

문제 바로가기



✅ 나의 풀이

def solution(babbling):
    answer = 0
    
    for word in babbling:
    	# 1. 옹알이 숫자로 치환하기
        word = word.replace("aya", "1")
        word = word.replace("ye", "2")
        word = word.replace("woo", "3")
        word = word.replace("ma", "4")
        
        # 2. 옹알이 유효성 검사
        if word.isdigit():
            for i in range(len(word)-1):
                if word[i] == word[i+1]: break
            else:
                answer += 1
            continue
        else:
            continue  
        
    return answer

1️⃣ 옹알이 숫자로 치환하기

조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음만 가능하다.
좀 더 쉽게 유효성 검사를 하기 위해 옹알이를 문자열 숫자로 바꿔주었다.

	"aya" → "1"
	"ye" → "2" 
	"woo" → "3"
	"ma" → "4"
        word = word.replace("aya", "1")
        word = word.replace("ye", "2")
        word = word.replace("woo", "3")
        word = word.replace("ma", "4")



2️⃣ 유효성 검사

조카가 발음할 수 있는 단어의 조건

1) 네 가지 발음"aya", "ye", "woo", "ma"과 이것을 조합한 발음
2) 단, 반복되는 발음이어서는 안됨. ("yeye"는 불가능, "yemaye"는 가능)


1) 네 가지 발음과 이것을 조합한 발음

만약, 발음가능한 단어들의 조합으로 이루어져있다면 1단계 치환을 거치고 난 뒤 모든 문자는 정수일것이다.
ex) "ayayeaya""121"

발음할 수 없는 단어가 하나라도 있다면 알파벳이 남아있게 된다.
ex) "yes""2s"

따라서, 1단계 이후에 문자는 모두 정수이어야 발음가능하다.

if word.isdigit():

2) 단, 반복되는 발음이어서는 안됨

"yemaye"는 가능하지만, "yeye"처럼 같은 발음이 연속으로 중복되어서는 안된다.

for i in range(len(word)-1):
	if word[i] == word[i+1]: break
else:
	answer += 1

for문을 사용하여 연속으로 중복된 정수가 있는지 확인하였다.



✅ 다른 풀이

알고리즘

  1. 연속으로 같은 발음 나오는지 확인하기
  2. 아닌 경우, 옹알이를 빈 문자로 치환한다.
  3. 최종 문자열이 빈 문자열인 경우 answer +1

연속으로 같은 발음 나오는 경우 처리하기

예를들어 "aya"가 연속으로 중복되었는지 확인하려면, 문자열에 "ayaaya"가 하나라도 있는지 확인하면 된다.
"ayaayaayaaya", "ayaaya" 모두 "ayaaya"가 하나라도 있으므로 발음불가능한 단어이다.

# 예시1
for j in ['aya','ye','woo','ma']:
            if j*2 not in i:
                i=i.replace(j,' ')
# 예시2
if "ayaaya" in b or "yeye" in b or "woowoo" in b or "mama" in b:
            continue



Error/실수

  • 첫 시도

    def solution(babbling):
        answer = 0
    
        for word in babbling:
    
            for ex in ["aya", "ye", "woo", "ma"]:
                word = word.replace(ex, "", 1)
    
            if word == "":
                answer += 1
    
        return answer

    연속해서 같은 발음을 하지 못한다는 것을 간과했다...
    위의 코드는 "yeye"도 발음가능하다고 판단하므로 잘못된 코드이다.

  • replace()는 원본값을 변경하지 않고 바뀐 값을 리턴한다.
    따라서 replace()의 반환값을 다시 변수에 할당해주어야 한다.

    word = word.replace("aya", "1")



Comment

🌀 특정 문자열 제거하는 방법: replace()

str = str.replace("abc", "")

처음에 문제 요구사항을 잘못이해해서 연속된 문자도 발음가능하도록 했다. 요구사항 분석을 꼼꼼히 하자.
풀이 방법을 떠올리는것은 쉬웠으나 연속으로 반복될수 없는 조건을 코드로 구현하는데 오래 걸렸다. 구현하는 연습을 계속하자.

profile
일단 하자.

0개의 댓글