옹알이 (1)

2024. 10. 1. 18:00코딩테스트 입문

https://school.programmers.co.kr/learn/courses/30/lessons/120956

 

프로그래머스

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

programmers.co.kr


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


제한사항

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

입출력 예

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

입출력 예 설명
입출력 예 #1

  • ["aya", "yee", "u", "maa", "wyeoo"]에서 발음할 수 있는 것은 "aya"뿐입니다. 따라서 1을 return합니다.

입출력 예 #2

  • ["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]에서 발음할 수 있는 것은 "aya" + "ye" = "ayaye", "ye", "ye" + "ma" + "woo" = "yemawoo"로 3개입니다. 따라서 3을 return합니다.

유의사항

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

옹알이 배열 babbling이 주어졌을 때, 조카가 발음할 수 있는 옹알이가 몇 개인지 구하는 문제입니다.

 

옹알이로 쓸 수 있는 단어들은 ["aya", "ye", "woo", "ma"]이고, 이 단어들은 최대 한 번까지만 사용이 가능합니다.

두 번 이상 등장하는 경우는 없다는 뜻이죠.

그러면 옹알이에 포함된 단어들을 replace 함수로 공백(" ")으로 대체하고, 공백을 제거한 해당 옹알이의 값이 ""이라면 그 옹알이는 발음할 수 있는 단어가 됩니다.

파이썬으로 문제를 풀어보겠습니다.

def solution(babbling):
    words = ["aya", "ye", "woo", "ma"]
    answer = 0
    
    for babble in babbling:
        for word in words:
            if word * 2 in babble:  # 같은 단어가 연속으로 두 번 나오는 경우
                break
            babble = babble.replace(word, " ")  # 각 단어를 공백으로 대체
        if babble.strip() == "":  # 모든 단어가 적절히 대체된 경우
            answer += 1
            
    return answer

 

replace 함수로 단어들을 공백으로 교체하고, 마지막에 strip 함수를 사용해서 모든 공백을 삭제합니다.

공백이 사라졌을 때 문자열이 "", 즉 비어 있다면 발음할 수 있는 단어이므로 answer에 1을 추가합니다.

단어가 2번 등장하는 경우는 사전 조건문으로 설정해서 공백이 될 수 없도록 미리 break로 설정해줘야 합니다.

 

패키지를 사용한다면 순열을 사용해서 가능한 모든 옹알이를 구하고, in 함수를 사용해서 비교하는 식으로도 가능하긴 할 것 같습니다. 다만 이 방법이 좀 더 효율적인 건 확실하네요.

'코딩테스트 입문' 카테고리의 다른 글

다음에 올 숫자  (0) 2024.09.30
연속된 수의 합  (0) 2024.09.29
종이 자르기  (0) 2024.09.28
문자열 밀기  (0) 2024.09.27
잘라서 배열로 저장하기  (1) 2024.09.26