옹알이 (1)

장현웅·2024년 1월 15일

기본 코드

def solution(babbling):
	return
코드 풀이 (1)

def solution(babbling):
    arr = ["aya", "ye", "woo", "ma"]
    cnt = 0
    for word in babbling:
        for i in arr:
            word = word.replace(i, " ")
            if not word.strip():
                cnt += 1
                break
    return cnt

제공된 문자열 배열의 단어가 "aya", "ye", "woo", "ma" 문자열을 포함한다면 공백 문자열 " "로 대체합니다. 빈 문자열 ""로 대체한다면 오류가 생길 수 있습니다.

예를 들어 "wyeoo"라는 단어를 입력받았고, 조카가 발음할 수 있는 단어 배열을 살펴보면 "ye"라는 문자열이 먼저 있기 때문에 이를 빈 문자열로 대체하면 "wyeoo"라는 문자열은 "woo"가 됩니다. 이 단어는 역시 또 대체가 가능해지기 때문에 실제로 조카가 말할 수 있는 단어들의 조합이 아닌데도 그런 것 처럼 오류가 발생할 수 있습니다.

해당 입력 단어에 공백 대체 작업이 끝나고 이 단어에 양 끝 공백 제거가 가능하다면 카운트 수를 올리고 모든 작업 후 카운트 수를 리턴합니다.

break는 내부 루프에서 첫 번째 단어에 대한 치환(word = word.replace(i, " ")) 이후에 곧바로 다음 단어로 넘어가도록 하고, if not word.strip():에서 단어가 공백인지 여부를 확인하여 만약 공백이라면 cnt를 증가시키고 더 이상 다른 단어를 비교하지 않도록 합니다.

코드 풀이 (2)

import re

def solution(babbling):
    arr = ["aya", "ye", "woo", "ma"]
    cnt = 0

    for word in babbling:
        modified_word = re.sub('|'.join(arr), ' ', word)
        
        if not modified_word.strip():
            cnt += 1

    return cnt

첫 번째 방법은 시간 복잡도가 너무 크고 너무 일차원적이라서 두 번째 풀이를 만들어봤습니다.

  1. arr의 각 요소를 or을 의미하는 |로 연결한 문자열을 생성합니다. aya|ye|woo|ma
  2. 정규 표현식을 사용하여 문자열에서 arr에 있는 어떤 단어가 발견되면 해당 단어를 공백으로 치환합니다. re.sub(pattern, replacement, string)
  3. 나머지는 위와 같습니다.

0개의 댓글