본문 바로가기
🔅코딩테스트 공부🔅/❗프로그래머스(Lv.1)

[프로그래머스] Level1 옹알이(2) (python)

by 윤무무 2023. 2. 9.

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

 

프로그래머스

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

programmers.co.kr

 

1. 내가 작성한 코드

 

수 없이 많은 for문이 나오는 코드를 보면서 "문자열 길이가 길어지면 백퍼 틀리겠는데?"라고 생각했다.

 

def solution(babbling):
    
    cnt = 0
    result = 0
    arr = []
    
    for i in babbling:
        i = i.replace("aya","A")
        i = i.replace("ye","B")
        i = i.replace("woo","C")
        i = i.replace("ma","D")
        
        cnt = 0
        for j in i:
            if j not in ["A","B","C","D"]:
                cnt+=1
    
        if cnt == 0:
            arr.append(i)

    for i in arr:
        if len(i) == 1:
            result+=1
        else:
            k = 0
            for j in range(len(i)-1):
                if i[j] == i[j+1]:
                    k+=1
            if k == 0:
                result+=1
            
    return result

 

본 문제는 1. 옹알이가 가능한 단어지만 연속으로 말할 때 2. 옹알이가 가능하지 않은 단어를 말할 때를 제거해야한다.

 

내가 문제를 푼 알고리즘은

 

1. 문장에 있는 '옹알이가 가능한 단어' 를 간단하게 A,B,C,D로 교체시킨다.

2. 교체된 문장에서 A,B,C,D가 아닌 단어가 있으면 제외하고 list에 삽입한다.

3. len(문자열)의 길이가 1인 경우 ex([A]) 정답

4. 길이가 1 이상이며, 앞 뒤가 다른 단어면 정답

 

인데, 너무 복잡하고 불필요하다.

 

2. 수정코드

반복되는 문자가 담긴 새로운 list를 만들어주면 좀 더 짜임새있게 해결이 가능하다.

 

def solution(babbling):
    answer = 0
    words = ["aya", "ye", "woo", "ma"]
    repeats = ["ayaaya", "yeye", "woowoo", "mama"]
    
    for x in babbling:
        for word in repeats:
            x = x.replace(word, "X")
        for word in words:
            x = x.replace(word, "O")
        
        isValid = True
        for char in x:
            if char != "O":
                isValid = False
                break
        if isValid == True:
            answer += 1
    
    return answer

https://velog.io/@bsm4045/Programmers-%EC%98%B9%EC%95%8C%EC%9D%B42-Python3 참고

댓글