https://school.programmers.co.kr/learn/courses/30/lessons/133499
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 참고
'🔅코딩테스트 공부🔅 > ❗프로그래머스(Lv.1)' 카테고리의 다른 글
[프로그래머스] Level1 둘만의 암호(python) (0) | 2023.02.10 |
---|---|
[프로그래머스] Level1 과일장수(python) (0) | 2023.02.09 |
[프로그래머스] Level1 기사단원의 무기(with python) (0) | 2023.02.08 |
[프로그래머스] Level1 비밀지도(with python) (0) | 2023.02.07 |
[프로그래머스] Level1 K번째 수(with python) (0) | 2023.02.07 |
댓글