머쓱이는 친구들과 369게임을 하고 있습니다. 369게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 머쓱이가 말해야하는 숫자 order가 매개변수로 주어질 때, 머쓱이가 쳐야할 박수 횟수를 return 하도록 solution 함수를 완성해보세요.
order ≤ 1,000,000| order | result |
|---|---|
| 3 | 1 |
| 29423 | 2 |
입출력 예 #1
입출력 예 #2
※ 공지 - 2023년 03월 24일 테스트 케이스가 추가되었습니다. 기존에 제출한 코드가 통과하지 못할 수도 있습니다.
💡 문제풀이 과정
- 답안 1번: 주어진 매개변수
order는 숫자 타입이므로, String type으로 변경해야 배열 형태로 나눌 수 있다. 따라서[…String(order)]하여 문자열 타입의 배열 형태로 복사 후filter()함수를 통해[‘3’, ‘6’, ‘9’]가 있는지includes()를 사용하여 포함된 것의length를 반환한다.- 답안 2번: 다른 사람의 풀이로 문자열 형태의 배열로 복사한
order를split(/[369]/)로 분할하여 그것들의length - 1을 반환하였다.split()에 정규표현식을 사용하였다는 점이 기발하다. 다음 예제 참고 ⬇️
let order = 29423; console.log(String(order).split(/[369]/)); // ['2', '42', '']
- 답안 3번:
matchAll(/[3|6|9]/g).length를 사용하여order에서 매칭되는 모든 것들의 개수를 반환하였다.
✅ 답안 #1
function solution(order) {
return [...String(order)].filter((v) => ["3", "6", "9"].includes(v)).length;
}
✅ 답안 #2
function solution(order) {
return ("" + order).split(/[369]/).length - 1;
}
✅ 답안 #3
function solution(order) {
return [...order.toString().matchAll(/[3|6|9]/g)].length;
}