프로그래머스 LEVEL 2(숫자 블록)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2022-11-14

  • 해결 방법 :
    • 현재 인덱스의 약수 중 자기 자신을 제외한 최대의 약수 값을 배열에 push() 하되, 그 약수가 10,000,000 보다 작아야 함
  • 회고 :
    • 처음에 단순히 제곱근을 통해 해결하려 하였으나 효율성 실패가 발생해서 문제를 다시 읽어 보았더니
    • 문제에 ‘그렙시는 길이가 1,000,000,000인 도로에 1번 블록부터 시작하여 10,000,000번 블록까지 위의 규칙으로 모두 놓았습니다.’ 라는 조건이 있었다.
    • 문제를 잘 읽자…
  • 코드

    const getMaxDivisor = (num) => {
        if (num === 1) return 0;
        for (let i = 2; i <= Math.sqrt(num); i++) {
            if (num % i === 0 && num / i <= 1e7) {
                return num / i;
            }
        }
        return 1;
    }
    
    function solution (begin, end) {
        const answer = Array.from({length: end - begin + 1}, () => 0);
          
        for (let i = begin; i <= end; i++) {
            answer[i - begin] = getMaxDivisor(i);
        }
          
        return answer;
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges