내 풀이를 바탕으로 지피티와 함께 조금 다듬어봤다.
[문제]
애기가 옹알이로 할 수 있는 말의 개수를 구하는 문제였다.
아직 4가지 단어만 말 할 수 있고, 애기기 때문에 연속해서 같은 단어를 발음하지 못한다.
[코드]
내 코드이다.
먼저 슬라이싱으로 처리하기 위해서 2글자 단어('ye', 'ma')와 3글자 단어('aya', 'woo')가 등장했을 때의 2가지 경우로 나눴다.
각 경우에서 babble의 앞 단어가 애기가 발음할 수 있는 단어이면, front_word라는 단어에 그 단어를 추가하고 babble에서 그 단어를 없애줬다.
여기서 추가한 단어가 기존의 front_word 단어와 같으면 발음할 수 없으므로 break.
babble의 앞단어가 애기가 발음할 수 없는 단어여도 바로 break.
babble에 아무것도 남지 않으면 애기가 단어를 모두 발음할 수 있다는 뜻이므로 answer 개수를 1 올려주고 break.
아니면 while문 안에서 이 과정이 계속 반복된다.
(+ 요새 실수를 줄이기 위해서 각 단계마다 print해서 보는 방법을 사용하고 있다. 확실히 실수가 줄어드는 것 같다.)
def solution(babbling):
answer = 0
for babble in babbling:
# print('---new babble---')
front_word = []
while True:
if babble[:2] == 'ye' or babble[:2] == 'ma':
front_word.append(babble[:2])
babble = babble[2:]
# print(f'1, fr = {front_word}, bab = {babble}')
if len(front_word) >= 2 and front_word[-2] == front_word[-1]:
# print('같은 단어 반복됨 (종료)')
break
elif babble[:3] == 'aya' or babble[:3] == 'woo':
front_word.append(babble[:3])
babble = babble[3:]
# print(f'2, fr = {front_word}, bab = {babble}')
if len(front_word) >= 2 and front_word[-2] == front_word[-1]:
# print('같은 단어 반복됨 (종료)')
break
else:
# print('해당 단어 없음 (종료)')
break
if babble == '':
answer += 1
# print('정답!')
break
elif babble != '':
# print('continue')
continue
return answer
[개선된 코드]
지피티는 valid_words를 리스트로 만들어두고, startswith 함수를 써서 풀었다. (이런 함수가 있었다니..)
처음에 글자수에 따라서 경우를 나누지 않아도 되니 확실히 코드가 간결해졌다.
흠.. 근데 너무 while for if if 이긴 하다.. 흠 . 내 코드에서 마지막 continue 부분만 없애면 내 코드가 나은 것 같기도 하고..
def solution(babbling):
valid_words = ["aya", "ye", "woo", "ma"]
answer = 0
for babble in babbling:
prev_word = ""
while babble:
found = False
for word in valid_words:
if babble.startswith(word):
if prev_word == word:
found = False
break
babble = babble[len(word):]
prev_word = word
found = True
break
if not found:
break
if not babble:
answer += 1
return answer
[느낀점]
startswith 함수가 있구나.. 파이썬 내장함수가 끝도 없이 발견된다 ..
이런 게 있다 정도만 알아두자
'기본기 다지기 > 코테 오답노트' 카테고리의 다른 글
[프로그래머스] 달리기 경주 (파이썬, 시간복잡도 개선) (0) | 2025.03.06 |
---|---|
[프로그래머스] 햄버거 만들기 (파이썬) (0) | 2025.03.03 |
[프로그래머스] 대충 만든 자판 (파이썬) (0) | 2025.02.27 |
[프로그래머스] 숫자 짝꿍 (파이썬) (0) | 2025.02.26 |
[프로그래머스] 평행 (파이썬) (0) | 2025.02.24 |