[Python] 프로그래머스 옹알이(1) 문제 풀이
코딩테스트 입문 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