KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (486)
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • Git (5)
    • Web (24)
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • ETC (1)
    • React 공식문서 (번역, 공부) (11)
      • Quick Start (2)
      • Installation (0)
      • Describing the UI (9)
      • Adding Interactivity (0)
      • Managing State (0)
      • Escape Hatches (0)
    • Next.js 공식문서 (번역, 공부) (3)
      • Getting Started (2)
      • Building Your Application (1)
    • PS (431)
      • 백준 (187)
      • Programmers (104)
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • Level 0
  • C
  • Level1
  • js
  • 백준
  • tree
  • 문자열
  • recursion
  • Level 2
  • string
  • programmers
  • 정렬
  • 그래프
  • 다이나믹 프로그래밍
  • 제코베 JS 100제
  • 수학
  • C++
  • Level 1
  • codeup
  • LeetCode

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun

Coding Note

Programmers / Level 2 / 숫자 블록 / JS
PS/Programmers

Programmers / Level 2 / 숫자 블록 / JS

2022. 8. 31. 19:51

문제 설명

그렙시에는 0으로 된 도로에 숫자 블록을 설치하기로 하였습니다. 숫자 블록의 규칙은 다음과 같습니다.

블록의 번호가 n 일 때, 가장 처음 블록은 n * 2번째 위치에 설치합니다. 그다음은 n * 3, 그다음은 n * 4, ...로 진행합니다.만약 기존에 블록이 깔려있는 자리라면 그 블록을빼고 새로운 블록으로 집어넣습니다.

예를 들어 1번 블록은 2,3,4,5, ... 인 위치에 우선 설치합니다. 그다음 2번 블록은 4,6,8,10, ... 인 위치에 설치하고, 3번 블록은 6,9,12... 인 위치에 설치합니다.

이렇게 3번 블록까지 설치하고 나면 첫 10개의 블록은 0, 1, 1, 2, 1, 3, 1, 2, 3, 2이됩니다.

그렙시는 길이가 1,000,000,000인 도로에 1번 블록부터 시작하여 10,000,000번 블록까지 위의 규칙으로 모두 놓았습니다.

그렙시의 시장님은 특정 구간의 어떤 블록이 깔려 있는지 알고 싶습니다.

구간을 나타내는 두 수 begin, end 가 매개변수로 주어 질 때, 그 구간에 깔려 있는 블록의 숫자 배열(리스트)을 return하는 solution 함수를 완성해 주세요.

 

제한 사항
  • begin, end 는 1 이상 1,000,000,000이하의 자연수 이고, begin는 항상 end보다 작습니다.
  • end - begin 의 값은 항상 10,000을 넘지 않습니다.

 

입출력 예
begin end result
1 10 [0, 1, 1, 2, 1, 3, 1, 4, 3, 5]

입출력 예 설명

입출력 예 #1
다음과 같이 블럭이 깔리게 됩니다.

 

 

function maxDivisor(num) {
    // 첫번째 블록은 항상 0이다.
    if(num === 1) return 0;
    
    // 1과 자기 자신을 제외한 가장 큰 약수를 구하는 방법은,
    // 1을 제외한 가장 작은 약수로 나누면 된다.
    for(let i=2; i<=Math.sqrt(num); i++) {
    	// 문제에서 보도블럭의 길이는 10억이지만,
        // 우리가 쓸 수 있는 보도블럭의 최대 번호는 1000만이다.
        // 따라서 최대 약수가 1000만 보다 크면 문제의 조건에 맞지 않으므로,
        // 1000만 보다 크면 쓸 수 없는 블록이므로 최대 약수가 아닌 1을 리턴해준다.
        if(num % i === 0 && num / i < 1e7) return num / i;    
    }
    
    return 1;
}

function solution(begin, end) {
    let result = [];
    
    for(let i=begin; i<=end; i++) {
        result.push(maxDivisor(i));
    }
    
    return result;
}

 

저작자표시

'PS > Programmers' 카테고리의 다른 글

Programmers / Level 2 / N-Queen / JS  (1) 2022.10.01
Programmers / Level 2 / k진수에서 소수 개수 구하기 / JS  (0) 2022.09.01
Programmers / Level 1 / 성격 유형 검사하기 / JS  (0) 2022.08.31
Programmers / Level 3 / 자물쇠와 열쇠 / JS  (0) 2022.08.22
    'PS/Programmers' 카테고리의 다른 글
    • Programmers / Level 2 / N-Queen / JS
    • Programmers / Level 2 / k진수에서 소수 개수 구하기 / JS
    • Programmers / Level 1 / 성격 유형 검사하기 / JS
    • Programmers / Level 3 / 자물쇠와 열쇠 / JS
    KimMinJun
    KimMinJun

    티스토리툴바