[프로그래머스] 옹알이 (1)

김서연·2024년 2월 8일

코딩테스트

목록 보기
1/31
post-thumbnail

📜문제 설명

문제 바로가기

머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

📍제한 사항

  • 1 ≤ babbling의 길이 ≤ 100
  • 1 ≤ babbling[i]의 길이 ≤ 15
  • babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
  • 즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.
  • 문자열은 알파벳 소문자로만 이루어져 있습니다.

📍입출력 예시

babblingresult
["aya", "yee", "u", "maa", "wyeoo"]1
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]3

📍유의사항

  • 네 가지를 붙여 만들 수 있는 발음 이외에는 어떤 발음도 할 수 없는 것으로 규정합니다. 예를 들어 "woowo"는 "woo"는 발음할 수 있지만 "wo"를 발음할 수 없기 때문에 할 수 없는 발음입니다.

📄문제 해결

📝내가 푼 코드

def solution(babbling):
    key = ["aya", "ye", "woo", "ma"] # 발음할 수 있는 것

    answer = 0
    for b in babbling:
        temp = b  # 임시저장
        for k in key:
            temp = 't'.join(temp.split(k))
            if set(temp) == set('t'):   # 't'만 들어있으면 발음할 수 있는 단어이다.
                answer += 1
                break

    return answer

이 문제를 해결할 때, 각 문자열에 대해 발음할 수 있는 옹알이(key)를 제거하고 남는 문자열이 공백('')이면 발음할 수 있는 것으로 보았다. 그렇게 풀기 위해 2중 반복문과 문자열을 split 후 공백으로 join하는 방법을 사용했다.

하지만 문제가 발생했는데, 예를 들어 y'aya'e 에서 aya를 ''으로 대체하면 'ye'가 되어 맞는 결과가 나올 수 없기 때문이다. (aya -> ye 순으로 진행할 때) 실제로는 y, e로 발음할 수 없는 결과인데도 말이다.

따라서, 이를 해결하기 위해 join 시 ''이 아닌 다른 문자인 't'를 사용하였다.

📑다른 사람들의 풀이

import re

def solution(babbling):.
    regex = re.compile('^(aya|ye|woo|ma)+$')
    cnt=0
    # 입력된 문자열 리스트를 순회하며 정규표현식에 매치되는 경우 카운터 증가
    for e in babbling:
        if regex.match(e):
            cnt+=1
    return cnt

내 코드에서는 발음할 수 있는 옹아리를 순차적으로 없애는 방식이었다. 하지만 정규표현식을 활용하면 입력된 문자열 리스트를 순회하며 매칭될 때 카운팅하는 방식으로 해결할 수 있다.

  • 정규표현식을 사용하여 주어진 문자열이 'aya', 'ye', 'woo', 'ma' 중 하나로 이루어져 있는지 확인하는 패턴을 정의
  • ^ 은 문자열의 시작을 의미. ^ 뒤에 있는 패턴으로 시작해야 한다.
  • (aya|ye|woo|ma) 은 괄호 안에 있는 aya...ma가 대안으로 이 중 하나와 매치되어야 한다.
  • + 은 앞의 괄호 안의 패턴이 최소 한 번 이상 반복되어야 한다.
    $ 은 문자열의 끝을 의미한다

🤔느낀점

기본 문법을 활용하는 것만으로는 효율적이고, 직관적인 코드를 구성하는 것이 어려움을 다시 한 번 체감할 수 있었다. 앞으로 코딩테스트를 공부하며 알게된 내용 또한 흘려보내지 않고 공부해 활용할 수 있도록 노력해야겠다.

profile
가보자고! 🔥

2개의 댓글

comment-user-thumbnail
2024년 2월 8일

잘 읽고 갑니다. 깔끔하게 잘 푸신 것 같아요!

1개의 답글