문제
머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ babbling의 길이 ≤ 100
- 1 ≤ babbling[i]의 길이 ≤ 30
- 문자열은 알파벳 소문자로만 이루어져 있습니다.
내가 생각한 풀이 방법
조카가 발음할 수 있는 발음 리스트를 만든다.
babbling을 for문을 돌면서
발음 리스트와 같은 요소가 있다면 answer_list에 추가한다.
answer_list가 완성되면 for문을 돌면서 같은 발음이 연속되있다면 제거한다.
while i < len(answer_list)
i == i+1과 같다면 i+1을 remove()
(그걸 다시 answer_list에 대입)
answer_list의 갯수를 센다
코드로 구현
1차 시도
def solution(babbling):
answer = 0
pron = ['aya', 'ye', 'woo', 'ma']
answer_list = []
for i in babbling:
if i in pron:
answer_list.append(i)
i = 0
while i < len(answer_list)-1:
if answer_list[i] == answer_list[i+1]:
del answer_list[i+1]
answer = len(answer_list)
return answer
- 테스트 하나만 통과했다
발음할 수 있는 발음들을 중복되지 않게 조합해서 하나의 단어(?)가 될 수도 있다는 부분을 인지하지 못했다.
ex) "yemawoo"의 경우 발음할 수 있는 'ye' + 'ma' + 'woo'의 결합이고 연속적으로 같은 발음이 나오지 않기 때문에
발음할 수 있다...
나는 "ye", "ye" 면 발음 못한다고 이해했었다.. (babbling 내의 발음을 이어서 말한다는 줄)
처음부터 다시 생각해봐야할 것 같다
2차 시도
def solution(babbling):
answer = 0
pron = ['aya', 'ye', 'woo', 'ma']
answer_list = []
say = ''
for i in range(len(babbling)):
for j in range(len(babbling[i])):
say += babbling[i][j]
if say in pron:
say = ''
if say == '':
answer_list.append(i)
else:
say = ''
answer = len(answer_list)
return answer
- for문으로 babbling 내 요소들 그 안의 요소들을 돌면서, say라는 새로운 변수에 하나씩 더한다.
- 하나 더해질 때 마다 pron 안에 있는 요소와 같은지 검사하고 만약 같은 요소가 있다면 say를 빈 문자열로 만들어준다
- 만약 내부 for문을 다 돌고 나서 say가 빈 문자열이라면 i 내부의 모든 단어가 pron 안에 있었다는 이야기 이므로 answer_list에 append해준다.
- 바깥 for문에서 answer_list에 append되지 않은 (if문에 걸리지 않은) i의 경우 say에 어떠한 문자가 들어가 있는 상태이다. 그렇기 때문에 다음 i에 대한 검사를 하기 전에 비워줘야 한다
- 하지만 여전히 연속된 발음에 대해서는 해결하지 못하고 있다. ex) "yeye"
3차 시도
def solution(babbling):
answer = 0
pron = ['aya', 'ye', 'woo', 'ma']
answer_list = []
say = ''
pre_say = ''
for i in range(len(babbling)):
for j in range(len(babbling[i])):
say += babbling[i][j]
if say in pron:
if say != pre_say:
pre_say = say
say = ''
else:
break
if say == '':
answer_list.append(i)
else:
say = ''
pre_say = ''
answer = len(answer_list)
return answer
- pre_say라는 변수를 새로 만듦. 이전 say에 담겨 있던 값을 2차 시도 때 처럼 ''로 바꿔버리지 않고 pre_say에 저장. pre_say 저장 후 say는 비워줌. 만약 다음에 들어온 say가 pre_say와 값이 같다면 바깥 for문으로 돌아감
- 바깥 for문에서 pre_say까지 비워줌
- '코드 실행' 테스트는 통과했는데 채점 결과 80점 나옴..
4차 시도
def solution(babbling):
answer = 0
pron = ['aya', 'ye', 'woo', 'ma']
answer_list = []
say = ''
pre_say = ''
for i in range(len(babbling)):
for j in range(len(babbling[i])):
say += babbling[i][j]
if say in pron:
if say != pre_say:
pre_say = say
say = ''
else:
break
if say == '':
answer_list.append(babbling[i])
pre_say =''
else:
say = ''
pre_say = ''
answer = len(answer_list)
return answer
- answer_list에 append해주고 나서 pre_say도 초기화 시켜줘야함. 안그러면 이전게 남아 있음
- 보면 지금은 "uuu"에 대해서 검사하고 있어서 pre_say에 들어갈 것이 전혀 없는데 이전 i에서 검사하던 ye가 남아 있음
이 경우 "uuu"는 어떻게 잘 넘어갈지 몰라도 다음 "yeye"를 검사할 때 pre_say가 비워져 있지 않아 겹쳐진 채로 검사하게 됨
- 'python tutor' 사랑해요...
다른 사람 풀이
'Python > 프로그래머스' 카테고리의 다른 글
[프로그래머스 lv.1] 푸드 파이트 대회 (1) | 2023.09.06 |
---|---|
[프로그래머스 lv.1] 햄버거 만들기 (0) | 2023.09.06 |
[프로그래머스 lv1.] 콜라 문제 (0) | 2023.09.04 |
[프로그래머스 lv.1] 삼총사 (0) | 2023.09.04 |
[프로그래머스 lv.1] 나머지가 1이 되는 수 찾기 (0) | 2023.09.04 |