프로그래머스 연습문제
- Lv 1. 옹알이 (2) (Python)
https://school.programmers.co.kr/learn/courses/30/lessons/133499
def solution(babbling):
answer = 0
speak = ["aya", "ye", "woo", "ma"]
# speak에서 조합해서 완성되는 단어만 발음 가능
# 같은거 두번을 조합해서는 발음 불가능
# 네가지 발음과 정확히 똑같은 발음이 있는 경우 확인하기 -> 존재한다면 발음할 수 있으니 answer에 +1 해주고 다음 검사는 건너뛰도록 제거
for bab in babbling:
if(bab in speak):
answer += 1
babbling.remove(bab)
# 발음할 수 있는지 검사하기
for bab in babbling:
can_speak = True # 발음할 수 있는지 아닌지 확인하기 위한 변수
while (len(bab) > 0):
if ("aya" in bab):
bab = bab.replace("aya", "1")
if ("ye" in bab):
bab = bab.replace("ye", "2")
if ("woo" in bab):
bab = bab.replace("woo", "3")
if ("ma" in bab):
bab = bab.replace("ma", "4")
else:
break
if(bab.isdigit()): # 완벽하게 숫자로 모두 다 replace 되었다면 -> 4가지를 붙여 만들 수 있는 발음들
for i in range(len(bab)-1): # 같은 발음을 연속으로 하는지 확인
if(bab[i] == bab[i+1]): # 연속으로 하는 발음이라면 -> 발음할 수 없음
can_speak = False # False로 변경
break
else: # 모두 완벽하게 숫자로 replace되지 않은 경우 (중간에 치환되지 못한 글자가 존재, 즉 발음할 수 없는 단어)
can_speak = False # False로 변경
if(can_speak): # 만약 can_speak가 True라면 -> 발음 가능
answer += 1
return answer
if __name__ == '__main__':
print(solution(["aya", "yee", "u", "maa"]))
print(solution(["ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"]))
# 아래는 반례 케이스들
print(solution(["yayae"])) # 0
print(solution(["ayayeaya"])) # 1
print(solution(["ayayeye"])) # 0
print(solution(["ayayeayayeayaaya"])) # 0
print(solution(["ayayemaaya"])) # 1
print(solution(["yeye", "yeye"])) # 0
replace(”aya”, “ “)
혹은 replace(”aya”, ““)
로 치환하여 공백 혹은 삭제하는 식으로 만들었는데, 이렇게 되면 중복되는 발음인지 아닌지를 검사할 때 너무 까다로웠다.“yeye”
의 경우 그냥 빈칸이 되어버리거나 공백이 되어버리니 “ayaye”
같이 정답인 경우와 같은 값을 도출하여 이를 걸러내는게 어려웠음replace(”aya”, ““)
로 삭제하듯이 치환해버리면 → 반례 케이스 중 "yayae"
같은게 제일 어려워진다.“aya”
가 삭제되면서 → “ye”
가 남게 되니 이것도 삭제되고 → 결국 정답처리가 되어버림if j*2 not in i:
로 j*2를 해서 “yeye"
같은 중복되는거 걸러내기 가능…len == 0
→ answer + 1def solution(babbling):
answer = 0
for i in babbling:
for j in ['aya','ye','woo','ma']:
if j*2 not in i:
i=i.replace(j,' ')
if len(i.strip())==0:
answer +=1
return answer
문자열 중복 제거 3가지 방법
참고 : https://11001.tistory.com/81
▶️ ’’.join(set(문자열))
s = 'aaabbbccc'
b = ''.join(set(s))
print(b) # cba
▶️ ’’.join(dict.fromkeys(문자열))
s = 'aaabbbccc'
a = ''.join(dict.fromkeys(s))
print(a) # abc
▶️ ’’.join(OrderedDict.fromkeys(문자열))
from collections import OrderedDict
s = 'aaabbbccc'
a = ''.join(OrderedDict.fromkeys(s))
print(a) # abc
문자열 공백 제거는 strip()
참고 : https://wikidocs.net/33017
▶️ str.strip()
: 공백 제거
>>> ex_str = " hello "
>>> ex_str.strip()
# 'hello'
▶️ str.strip('특정문자')
: 특정 문자를 모두 제거
>>> 'www.example.com'.strip('m')
# 'www.example.co'
>>> 'www.example.com'.strip('w')
# '.example.com'
>>> 'www.example.com'.strip('cmowz.')
# 'example'
▶️ str.lstrip()
: 선행 문자만 지움
>>> url = 'https://wikidocs.net'
## strip() 을 사용했을 때, net 의 't'도 생략됨.
>>> url.strip('https://')
# 'wikidocs.ne'
## lstrip() 을 사용했을 때,
>>> url.lstrip('https://')
# 'wikidocs.net'
▶️ str.rstrip()
: 후행 문자만 지움
>>> url = 'https://wikidocs.net'
>>> url.rstrip('.net')
# 'https://wikidocs'