codewars: Count the smiley faces!

Jieun·2021년 1월 9일
0

js알고리즘

목록 보기
4/6

✅ 문제

Given an array (arr) as an argument complete the function countSmileys that should return the total number of smiling faces.

Rules for a smiling face:

  • Each smiley face must contain a valid pair of eyes. Eyes can be marked as : or ;
  • A smiley face can have a nose but it does not have to. Valid characters for a nose are - or ~
  • Every smiling face must have a smiling mouth that should be marked with either ) or D
  • No additional characters are allowed except for those mentioned.

Valid smiley face examples: :) :D ;-D :~)
Invalid smiley faces: ;( :> :} :]

해석 :
argument 객체로써 배열을 받아 웃는 얼굴의 총 갯수를 리턴하는 countSmileys 함수를 완성하라.

웃는 얼굴의 규칙:

  • 웃는 얼굴의 눈은 : 혹은 ;를 가져야 한다.
  • 웃는 얼굴의 코는 - 혹은 ~를 포함해야 하지만 없어도 무방하다.
  • 웃는 얼굴의 입은 무조건 ) 혹은 D를 가진다.
  • 위에 명시된 문자 외엔 포함될 수 없다.

유효한 웃는 얼굴 예시: :) :D ;-D :~)
유효하지 않는 예시: ;( :> :} :]


✅ 예시

countSmileys([':)', ';(', ';}', ':-D']);       // should return 2;
countSmileys([';D', ':-(', ':-)', ';~)']);     // should return 3;
countSmileys([';]', ':[', ';*', ':$', ';-D']); // should return 1;



✅ 내가 만든 답

function countSmileys(arr) {
    const arr2 = [];
    const smilyface = [':)', ':D', ';)', ';D', ':-)', ':-D', ';-)', ';-D', ':~)', ':~D', ';~)', ';~D'];
    arr.filter( a => {
        if (smilyface.includes(a)) arr2.push(a)
    });
    return arr2.length;
}
  • (1)웃는 얼굴의 모든 가능한 예시를 배열로 만들어 준 후 받은 배열에 (2)겹치는 웃는 얼굴을 새로운 배열에 push 해준 뒤 (3)새 배열의 length를 리턴하는 방식으로 로직을 생각했다.
  • smilyface.includes(a)를 a.incldes(smilyface)라고 쳐놓고선 왜 안되지?를 오랫동안 헤매고 있었다.
  • 샘플 테스트를 통과하고 attempt를 눌렀는데 계속 오류가 몇 개 생겨서 또 찾아보니 smilyface 배열 중간에 빠뜨린 웃는 얼굴이 하나 있었고.. 🥵


✅ 다른 사람 답

function countSmileys(arr) {
  return arr.filter(x => /^[:;][-~]?[)D]$/.test(x)).length;
}
  • /^[:;][-~]?[)D]$/ 가 어떻게 사용되는지 찾아보고 업데이트 할 것.
  • 문제에 array as an argument라고 적혀있어 argument에 대한 설명을 찾아봤는데 MDN 설명에는 "Array 형태"란 arguments가 length 속성과 더불어 0부터 인덱스 된 다른 속성을 가지고 있지만, Array의 forEach, map과 같은 내장 메서드를 가지고 있지 않다는 뜻입니다. 라고 적혀있다. 따라서 pop 같은 array의 API를 사용하지 못한다.


0개의 댓글

Powered by GraphCDN, the GraphQL CDN