코딩테스트/프로그래머스

[Programmers][Python] 옹알이 (1)

PERIR 2023. 3. 8. 13:49

문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/120956

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

처음 작성한 코드

  • 단어 안에 옹알이가 최대 한 번씩만 들어있는 것을 이용해 단어마다 옹알이의 여부를 체크했다.
  • 리스트 babbling의 요소 문자열에서 옹알이가 들어있는지 체크했다.
    • 만약 옹알이가 있다면 그 옹알이의 문자열 길이를 카운트해 준다.
  • 문자열의 길이와 카운트된 옹알이의 문자열 길이의 합을 비교해서 일치하면 조카가 발음할 수 있는 단어가 된다.
def solution(babbling):
    wrd_lst3 = ["aya", "woo"]
    wrd_lst2 = ["ye", "ma"]
    answer = 0
    for bab in babbling:
        len_cnt = 0
        for wrd in wrd_lst3:
            if wrd in bab:
                len_cnt += 3
        for wrd in wrd_lst2:
            if wrd in bab:
                len_cnt += 2
        if len(bab) == len_cnt:
            answer += 1
    return answer

 

 

다른 코드

[코드1]

  • replace 함수를 이용한 풀이 방법이다.
  • 단어에서 옹알이가 있다면 ' ' 공백 문자열을 추가하여 제거해 준다.
    • ' ' 공백문자열을 사용하는 것은 '' 빈문자열 사용 시 'wyeoo' 같은 예시에서 'ye'가 제거되면 'woo'로 문자열이 변환될 수 있기 때문이다. ' ' 공백문자열로 문자열이 바로 붙지 않게 해 준다.
    • replace 함수 뒤에 인자 1은 한 번만 변환을 하게 하는 의미로, 옹알이가 한번만 변환되게 해 준다.
  • 변환을 마친 후에 strip 함수를 이용하여 공백을 모두 제거해 준 뒤 길이를 체크해 주자
    • 길이가 0이라면 기존에 있던 문자열은 옹알이로만 이루어졌다는 것이 되므로 조건에 맞는 케이스가 된다.
def solution(babbling):
    answer = 0
    for b in babbling:
        for wrd in ["aya", "ye", "woo", "ma"]:
            b = b.replace(wrd, ' ', 1)
        if len(b.strip()) == 0:
            answer += 1
    return answer

사실 처음에 replace를 이용하였는데, 공백문자열을 사용할 생각을 못해서 코드를 새로 작성했었다..