# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# ### 08/26/18 숫자 블록   
#
# #### 링크
#
#     https://programmers.co.kr/learn/courses/30/lessons/12923?language=python3
#     
# #### 문제 설명
#
# 그렙시에는 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 의 값은 항상 1,000을 넘지 않습니다.

def solution(begin, end):
    if (1 <= begin <= 1000000000) and (1 <= end <= 1000000000) and (begin < end) and (end - begin <= 1000):
            answer = [0 for i in range(end)]
            for j in range(1, int(end/2)+1): # 블럭의 종류
                for k in range(2, int(end/j)+1): # 도로의 위치 
                    answer[(j*k)-1] = j
    return answer[begin-1:end]


solution(1,10)

# #### 알고리즘 풀고나서    
#     1. 처음에는 1 ~ 10,000,000번 블록까지 모든 도로에 순서대로 놓으려고 했지만, end 파라미터만큼의 길이만큼의 도로만 블럭 까는 것으로 방법을 바꿈
#     2. 채점 후 정확성 테스트는 모두 통과했으나, 효율성 테스트에서 런타임 에러로 실패함
#     3. 다른 사람들이 올린 질문들을 살펴보니 같은 문제를 겪고 있었음. 효율성 테스트는 통과하지 못했지만 문제에 제시된 조건을 충족하는 코드로 마무리

StarcoderdataJupyterScriptsDedupFiltered