백준 10802번 문제 (369게임)

jihye_son·2022년 10월 27일
0

jihye's Algorithm

목록 보기
6/14

문제

문제
여러 사람이 둘러 앉아 즐기는 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 를 출력

profile
뽀짝뽀짝 나는야 FE 개발자

0개의 댓글