안녕하세요

우테코 프리코스 1주차 - 문제 3 본문

우테코 프리코스/1주차

우테코 프리코스 1주차 - 문제 3

sakuraop 2022. 10. 29. 03:04

https://github.com/youngentry/javascript-onboarding/blob/main/docs/PROBLEM3.md

 

 

🚀 기능 요구 사항

배달이가 좋아하는 369게임을 하고자 한다. 놀이법은 1부터 숫자를 하나씩 대면서, 3, 6, 9가 들어가는 숫자는 숫자를 말하는 대신 3, 6, 9의 개수만큼 손뼉을 쳐야 한다.

숫자 number가 매개변수로 주어질 때, 1부터 number까지 손뼉을 몇 번 쳐야 하는지 횟수를 return 하도록 solution 메서드를 완성하라.

제한사항

  • number는 1 이상 10,000 이하인 자연수이다.

실행 결과 예시

numberresult

13 4
33 14

 


좋았던 점

  • 함수를 작게 나누어 depth를 최대 2까지로 만듭니다.
  • js doc 주석으로 함수에 대한 설명을 붙입니다.

 

 

아쉬운 점

  • depth를 줄이기 위해 함수로 나눈 방식이 올바른 방식인지 모릅니다.
    => 다른 사람들이 작성한 코드를 살펴보도록 해야겠습니다.

// 1. 입력받은 숫자 n의 1의 자릿수가 3으로 나누어 떨어질 경우 박수 count에 1을 더합니다.
// 1-2. 0은 항상 나누어떨어지기 때문에 조건처리합니다.
// 2. 각 자리의 숫자를 모두 확인하기 위해서 n을 10으로 나눕니다.
// 3. n을 10으로 나눈 몫이 0보다 클 경우 1의 시행을 반복합니다.
// 4. 1부터 number까지 1~2의 과정을 시행합니다.

 

function problem3(number) {
    /**3. n을 10으로 나눈 몫이 0보다 클 경우 1의 시행을 반복합니다.
     * @params n => 숫자 Number
     */
    const clapCount = (n) => {
        while (n > 0) {
            // 1-1. n의 1의 자릿수가 3으로 나누어 떨어질 경우 박수 count에 1을 더합니다.
            // 1-2. 0은 항상 나누어떨어지기 때문에 조건처리합니다.
            if ((n % 10) % 3 === 0 && n % 10 !== 0) {
                count++;
            }

            // 2. 각 자리의 숫자를 모두 확인하기 위해서 n에 n을 10으로 나눈 몫을 할당합니다.
            n = Math.floor(n / 10);
        }
    };

    let count = 0;

    // 4. 1부터 입력받은 숫자(number)까지 1~3의 과정을 시행합니다.
    for (let i = 1; i <= number; i++) {
        clapCount(i);
    }

    console.log(count);
    return count;
}

problem3(35);

 

다른 분들의 코드를 살펴보면 문자열 3,6,9가 포함되어 있는 경우로 카운트를 했습니다.

저는 개인적으로 문자열 코든느 성능이 안좋다는 인식이 있어서 강박적으로 가능하다면 문자열로 해결하지 않으려고 합니다!