[1주차 기본문제 2] 옹알이(1)

BossTeemo·2024년 6월 21일
0

알고리즘스터디

목록 보기
3/19
post-thumbnail

문자열 발음 문제 풀이


문제 설명

머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 반환하는 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

입출력 예 설명

입출력 예 #1

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

입출력 예 #2

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


내 풀이

문제 해결을 위해 다음과 같은 단계를 수행했습니다:

  1. 네 가지 발음을 포함하는 정규 표현식을 생성합니다.
  2. 각 문자열에 대해 정규 표현식을 사용하여 조건을 만족하는지 확인합니다.
  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;
}

코드 설명

  1. 발음 리스트 정의: 사용할 네 가지 발음을 words 배열에 저장합니다.

    const words = ["aya", "ye", "woo", "ma"];
  2. 정규 표현식 생성: words 배열의 요소를 | 연산자로 결합하여 하나의 정규 표현식을 만듭니다. 이 정규 표현식은 ^$를 사용하여 문자열 전체가 네 가지 발음으로만 구성되어 있는지를 확인합니다.

    const pattern = new RegExp(`^(${words.join('|')})+$`);
  3. 조건 확인 및 개수 세기: 각 문자열에 대해 정규 표현식을 사용하여 조건을 확인하고, 조건을 만족하면 answer를 증가시킵니다.

    for (const str of babbling) {
        if (pattern.test(str)) {
            answer++;
        }
    }
  4. 결과 반환: 조건을 만족하는 문자열의 개수를 반환합니다.

    return answer;

이 코드는 문자열 배열 babbling의 각 문자열이 네 가지 발음("aya", "ye", "woo", "ma")으로만 구성되어 있는지를 확인하고, 조건을 만족하는 문자열의 개수를 반환합니다. 입출력 예시에서도 정확한 결과를 얻을 수 있습니다.


실행 결과


ChatGpt 활용: 코드 평가

평가

  1. 정확성: 모든 테스트 케이스를 정확히 통과하며, 문제의 요구사항을 충족합니다. 네 가지 발음("aya", "ye", "woo", "ma")로만 구성된 문자열인지 확인하여 조건을 만족하는 문자열의 개수를 셉니다.

  2. 효율성:

    • 정규 표현식을 사용하는 방법은 각 문자열을 한 번씩 확인하고, 정규 표현식 매칭을 통해 문제를 해결합니다. 시간 복잡도는 O(n * m)입니다. 여기서 n은 babbling 배열의 길이, m은 각 문자열의 평균 길이입니다.
    • 주어진 제한사항(1 ≤ babbling의 길이 ≤ 100, 1 ≤ babbling[i]의 길이 ≤ 15)을 고려했을 때, 이 방법은 충분히 효율적입니다.
  3. 가독성: 코드가 간결하고 이해하기 쉽습니다. 변수 이름과 주석이 명확하여 코드의 목적과 동작을 쉽게 파악할 수 있습니다.

  4. 유지보수성: 발음 리스트와 정규 표현식을 명확하게 분리하여 코드의 유지보수성이 높습니다. 발음 리스트를 변경할 경우에도 코드의 다른 부분을 수정할 필요 없이 정규 표현식 생성 부분만 수정하면 됩니다.

개선 가능성

이미 매우 잘 작성된 코드이지만, 개선할 수 있는 부분을 굳이 찾자면 변수명을 조금 더 명확하게 할 수 있습니다. 예를 들어 pattern 대신 validPattern과 같은 이름을 사용하면 코드의 의도를 조금 더 명확하게 할 수 있습니다.

결론

당신의 풀이는 알고리즘 코딩 테스트 관점에서 모범 답안으로 평가될 수 있습니다. 문제의 요구사항을 정확히 충족하고, 제한사항 내에서 효율적으로 동작하며, 가독성과 유지보수성도 좋습니다. 정규 표현식을 사용하여 문제를 해결하는 접근 방식은 간결하고 효과적입니다.

profile
1인개발자가 되겠다

0개의 댓글