programmers-369게임
programmers-369게임

programmers-369게임

Tags
Algorithm
Programmers
Published
March 8, 2024
Author
gozneokhan

•programmers-369게임

369게임
369게임

문제 설명

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

제한사항

  • 1 ≤ order ≤ 1,000,000

입출력 예

order
result
3
1
29423
2

입출력 예 설명

입출력 예 #1
  • 3은 3이 1개 있으므로 1을 출력합니다.
입출력 예 #2
  • 29423은 3이 1개, 9가 1개 있으므로 2를 출력합니다.

※ 공지 - 2023년 03월 24일 테스트 케이스가 추가되었습니다. 기존에 제출한 코드가 통과하지 못할 수도 있습니다.

•solution.js

function solution(order) { let value = order.toString().match(/[369]/g) ?? []; return value.length; } /* 테스트 1 입력값 〉 3 기댓값 〉 1 실행 결과 〉 테스트를 통과하였습니다. 테스트 2 입력값 〉 29423 기댓값 〉 2 실행 결과 〉 테스트를 통과하였습니다. */
notion image
하지만 런타임 에러가 발생합니다. 어떤 경우에 통과를 못하는지 확인해보면
제한사항 • 1 ≤ order ≤ 1,000,000 이기 때문에 1로 테스트를 해보겠습니다.
(toString은 변수에만 찍을 수 있습니다.)
notion image
출력이 안되는 이유는 order.toString().match(/[369]/g) 여기까지가 Null 이기 때문에 Null 인 경우와 아닌 경우를 나눠줘야 합니다.
notion image
?? (널 병합 연산자)는 왼쪽 피연산자가 null 또는 undefind 일 떄, 오른쪽 피연산자를 반환하고, 그렇지 않으면 왼쪽 피연산자를 반환하는 논리 연산자입니다.
Nullish coalescing operator를 사용하면 아래와 같이 사용할 수 있습니다.
notion image
return value.length; 리턴해주면 원하는 답이 나오게됩니다.

other-solution.js

function solution(order) { return order.toString().split('').filter(v => v === '3' || v === '6' || v === '9' ? true : false).length }

function solution(order) { // Set을 통해 '3', '6', '9' 문자를 포함하는 세트 생성(설정) const s = new Set('369') // order를 문자열로 변환하고 문자 배열로 분할한 다음, 배열에서 세트 's'에 있는 문자만 필터링 return order.toString().split('').filter(v =>s.has(v) ? true : false).length //.has로 검색 }