문제
여러 사람이 둘러 앉아 즐기는 369 게임은 다음과 같은 규칙을 가지고 있다. 규칙: 양의 정수 A에서 시작하여 차례로 사람들 이 돌아가면서 숫자를 하나씩 증가하면서 불러 나간다. 단, 부르는 숫자가 3의 배수이거나 그 숫자에 3, 6, 9중 하나라도 들어 있는 경우에 숫자는 부르지 않고 박수를 친다.
예를 들어, 369 게임을 17부터 시작하는 경우를 생각해보자. 박수를 X로 표현하면, 이 게임의 진행은 17-X-X-20-X-22-X-X-25–X–X-28-X-X …과 같을 것이다.
시작하는 양의 정수 A와 끝나는 양의 정수 B가 주어졌을 때, 박수를 치는 총 횟수를 구하는 프로그램을 작성하시오.
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr){
let answer=0,cnt1=0 ,cnt2=0, sum =0;
let a =arr[0]//시작
let b =arr[1] //끝
let arr1 = []
for( let i = a ; i <= b ; i ++){
tmp = i
while(tmp){
sum = (tmp%10); //나머지
if( sum === 3 || sum ===6 || sum ===9) {
cnt1 ++
arr1.push(i)
break;
}
tmp=Math.floor(tmp/10); //몫
}
}
for( let i = a ; i <=b ; i ++){
if(parseInt(i%3) === 0 ) {cnt2++
arr1.push(i)
}
}
const set = new Set(arr1)
answer = [...set]
return answer.length ;
}
let a=[40,50];
console.log(solution(a));
</script>
</body>
</html>
자리수 별로 쪼갠 다음
자리수에서 3,6,9 중 하나가 나오면 cnt를 ++ 해주고 break 문으로 탈출,
그리고 해당 원소를 arr1에 push() 해준다
1씩 늘려가며 3의 배수일시 cnt를 ++ 해주고 마찬가지로 arr1에 해당 원소 push()
그리고 arr1의 원소들을 set 으로 중복 원소 제거한 다음
arr1을 배열형태로 바꾸고 arr1의 length 를 출력