Post

푸드 파이트 대회

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

📔 문제 설명

머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 “aya”, “ye”, “woo”, “ma” 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

💡 입출력 예 ingredient| result

  • [2, 1, 1, 2, 3, 1, 2, 3, 1]2
    [1, 3, 2, 1, 2, 1, 3, 1, 2]0

💻내가 작성한 코드

  • checkRepeat 함수를 통해서 반복단어인지 확인
  • 반복함수가 아니고, 모두 발음할 수 있는 단어면 값 더하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function solution(babbling) {
  let answer = 0;
  const checkRepeat = (b) => {
    let repeatWord = false;
    ["aya", "ye", "woo", "ma"].forEach((w) => {
      if (b.includes(w.repeat(2))) {
        repeatWord = true;
        return;
      }
    });
    return repeatWord;
  };
  for (const bab of babbling) {
    const isRepeat = checkRepeat(bab);
    if (bab.replace(/aya|ye|woo|ma/g, "").length === 0 && !isRepeat) {
      answer++;
    }
  }
  return answer;
}

💻다른 사람 풀이

  • 정규표현식 풀이
1
2
3
4
5
6
7
8
9
function solution(babbling) {
  const regexp1 = /(aya|ye|woo|ma)\1+/;
  const regexp2 = /^(aya|ye|woo|ma)+$/;

  return babbling.reduce(
    (ans, word) => (!regexp1.test(word) && regexp2.test(word) ? ++ans : ans),
    0
  );
}

/(aya|ye|woo|ma)\1+/;

  • (aya|ye|woo|ma): 지정된 단어 중 하나와 일치하는 캡처 그룹
  • \1+: 반복되는 단어 확인
  • 즉, 반복문자열 검사

/^(aya|ye|woo|ma)+$/;

  • ^: 문자열 시작 인수
  • (aya|ye|woo|ma): 지정된 단어 중 하나와 일치하는 캡처 그룹
  • $: 문자열 끝을 인수
  • 즉, (aya|ye|woo|ma)이 포함되어있는지 확인
This post is licensed under CC BY 4.0 by the author.