문제
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/133499
머쓱이가 돌보는 조카는 "aya", "ye", "woo", "ma", 그리고 이 네 가지 발음을 조합해 만들 수 있는 발음 밖에 하지 못한다. 그리고 연속해서 같은 발음을 하는 것을 어려워한다.
입력으로 문자열 배열 babbling이 주어지면 머쓱이의 조카가 발음할 수 있는 단어의 개수는 몇 개인가?
내 풀이
단순하게 접근했다.
1. 문자열 b이 조카가 발음할 수 있는 문자열 defi로 시작하는지 확인한다. 단, 이전에 발음한 문자열 pre이 아니어야 한다.
2. 만약 조건에 맞으면 발음한 문자열 pre을 갱신하고, 문자열 b를 문자열 defi 길이만큼 앞에서 자른다.
3. 1~2의 과정을 문자열 b가 ''가 아닐 때까지 반복하되, 조건에 맞지 않으면 바로 빠져나온다.
4. 반복문을 빠져나온 후 문자열 b가 비어있으면 조카가 발음할 수 있는 문자열에 해당한다.
5. 1~4의 과정을 입력 문자열 배열 babbling 만큼 반복한다.
def solution(babbling):
defi = ["aya", "ye", "woo", "ma"]
answer = 0
for b in babbling:
pre = ''
while b != '':
if pre != defi[0] and b.startswith(defi[0]):
pre = defi[0]
b = b[len(defi[0]):]
elif pre != defi[1] and b.startswith(defi[1]):
pre = defi[1]
b = b[len(defi[1]):]
elif pre != defi[2] and b.startswith(defi[2]):
pre = defi[2]
b = b[len(defi[2]):]
elif pre != defi[3] and b.startswith(defi[3]):
pre = defi[3]
b = b[len(defi[3]):]
else:
break
if not b:
answer += 1
return answer
다른 사람 풀이
훨씬 좋은 풀이가 있어 적어둔다.
1. 문자열 b가 조카가 발음할 수 있는 단어의 연속을 포함하는지 확인한다.
2. 포함하고 있지 않으면 조카가 발음할 수 있는 단어를 공백 ' '이나 다른 문자로 치환한다. 공백 ''로 치환하면 연속적이지 않았던 발음이 연속으로 취급될 수 있으므로 주의한다.
3. 치환한 문자를 제거했을 때 문자열이 남아있지 않으면 조카가 발음할 수 있는 문자열에 해당한다.
def solution(babbling):
answer = 0
for b in babbling:
for d in ["aya", "ye", "woo", "ma"]:
if d * 2 not in b:
b = b.replace(d, ' ')
if not b.strip():
answer += 1
return answer
참고 문서
https://school.programmers.co.kr/learn/courses/30/lessons/133499