코딩 테스트 준비

[Python] 프로그래머스 옹알이(1) 문제 풀이

몰라몰라개복치 2022. 11. 30. 15:51

코딩테스트 입문 part에서 정답률이 제일 낮길래 궁금해서 풀어봤다(무려 24퍼...)

 

 

문제 링크

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

문제만 읽고는 이해하기 힘든데 입출력 예 설명을 읽으면 어느 정도는... 이해가 된다.

 

조건을 정리해보자면

 

#1 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용한 조합한 발음밖에 하지 못한다.

- 따라서 aya는 가능

- ayaaya는 불가능

- ayamaaya는 불가능

 

#2 문자열은 알파벳 소문자로만 이뤄져있음

 

풀어보자...

 

babbling에 있는 문자열들을 불러오기 위해 for문 사용

 

 for babble in babbling:

 

 

각 문자열이 위에 조건에 해당하는지 확인 과정 필요.

조카가 낼 수 있는 4가지의 문자열에 해당하는 문자가 있는지 확인해야 됨 (대신 중복 X, 최대 한 번)

 

for word in ["aya", "ye", "woo", "ma"]:
	babble = babble.replace(word,' ',1)

 

- 조카가 발음할 수 있는 문자열을 하나씩 불러와 babble에 발음할 수 있는 문자열이 있다면 replace() 함수를 통해 ' '(공백) 처리    

- 그러나 이때 최대한 한 번씩 사용해야 됨

- 따라서 replace에 count 인수를 넣어줘서 1로 설정. 따라서 aya가 두 개 있다 하더라도 1개가 지워지면 그 babble은 읽을 수 없게 되는 것.

 

 

 

 

파이썬에서 replace() 함수에 대해 다시 한번 정리해보자면

 

replace(old, new, [count]) -> replace("찾을값", "바꿀값", [바꿀횟수]) 

 

다음과 같이 사용된다. 따라서 위의 코드에선 조카가 발음할 수 있는 단어를 찾아서 공백으로 바꿔줬고 대신 횟수는 한 번으로 한정한 것이다. count가 없다면 횟수에 상관없이 다 바뀜!

 

저 이중 for문을 통해

이제 조카가 읽을 수 있는 문자열은 모두 "     " 공백 처리가 돼있을 것이다.

 

그렇다면 공백인 문자의 수만큼 return 해주면 해결 완

python에서 공백을 제거하는 함수는 strip()이다.

 

if babble.strip() == '' :
	answer = answer+1

 

 

 

그렇다면 전체코드를 짜보면

 

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