머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling
이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 반환하는 solution
함수를 완성해주세요.
babbling
의 길이 ≤ 100babbling[i]
의 길이 ≤ 15babbling
의 각 문자열에서 "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을 반환합니다.
입출력 예 #2
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]에서 발음할 수 있는 것은 "aya" + "ye" = "ayaye", "ye", "ye" + "ma" + "woo" = "yemawoo"로 3개입니다. 따라서 3을 반환합니다.
문제 해결을 위해 다음과 같은 단계를 수행했습니다:
function solution(babbling) {
var answer = 0;
// 사용할 발음 리스트
const words = ["aya", "ye", "woo", "ma"];
// 발음 리스트를 사용하여 정규 표현식 생성
const pattern = new RegExp(`^(${words.join('|')})+$`);
// 발음할 수 있는 단어의 개수 세기
for (const str of babbling) {
// 정규 표현식을 사용하여 조건 확인
if (pattern.test(str)) {
answer++;
}
}
return answer;
}
발음 리스트 정의: 사용할 네 가지 발음을 words
배열에 저장합니다.
const words = ["aya", "ye", "woo", "ma"];
정규 표현식 생성: words
배열의 요소를 |
연산자로 결합하여 하나의 정규 표현식을 만듭니다. 이 정규 표현식은 ^
와 $
를 사용하여 문자열 전체가 네 가지 발음으로만 구성되어 있는지를 확인합니다.
const pattern = new RegExp(`^(${words.join('|')})+$`);
조건 확인 및 개수 세기: 각 문자열에 대해 정규 표현식을 사용하여 조건을 확인하고, 조건을 만족하면 answer
를 증가시킵니다.
for (const str of babbling) {
if (pattern.test(str)) {
answer++;
}
}
결과 반환: 조건을 만족하는 문자열의 개수를 반환합니다.
return answer;
이 코드는 문자열 배열 babbling
의 각 문자열이 네 가지 발음("aya", "ye", "woo", "ma")으로만 구성되어 있는지를 확인하고, 조건을 만족하는 문자열의 개수를 반환합니다. 입출력 예시에서도 정확한 결과를 얻을 수 있습니다.
정확성: 모든 테스트 케이스를 정확히 통과하며, 문제의 요구사항을 충족합니다. 네 가지 발음("aya", "ye", "woo", "ma")로만 구성된 문자열인지 확인하여 조건을 만족하는 문자열의 개수를 셉니다.
효율성:
babbling
배열의 길이, m은 각 문자열의 평균 길이입니다.babbling
의 길이 ≤ 100, 1 ≤ babbling[i]
의 길이 ≤ 15)을 고려했을 때, 이 방법은 충분히 효율적입니다.가독성: 코드가 간결하고 이해하기 쉽습니다. 변수 이름과 주석이 명확하여 코드의 목적과 동작을 쉽게 파악할 수 있습니다.
유지보수성: 발음 리스트와 정규 표현식을 명확하게 분리하여 코드의 유지보수성이 높습니다. 발음 리스트를 변경할 경우에도 코드의 다른 부분을 수정할 필요 없이 정규 표현식 생성 부분만 수정하면 됩니다.
이미 매우 잘 작성된 코드이지만, 개선할 수 있는 부분을 굳이 찾자면 변수명을 조금 더 명확하게 할 수 있습니다. 예를 들어 pattern
대신 validPattern
과 같은 이름을 사용하면 코드의 의도를 조금 더 명확하게 할 수 있습니다.
당신의 풀이는 알고리즘 코딩 테스트 관점에서 모범 답안으로 평가될 수 있습니다. 문제의 요구사항을 정확히 충족하고, 제한사항 내에서 효율적으로 동작하며, 가독성과 유지보수성도 좋습니다. 정규 표현식을 사용하여 문제를 해결하는 접근 방식은 간결하고 효과적입니다.