머쓱이는 친구들과 369게임을 하고 있습니다. 369게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 머쓱이가 말해야하는 숫자 order
가 매개변수로 주어질 때, 머쓱이가 쳐야할 박수 횟수를 return 하도록 solution 함수를 완성해보세요.
order
≤ 1,000,000order | 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;
}