[1스4코1파] 1명의 스위프트 개발자와 4명의 코틀린 개발자, 1명의 파이썬 개발자코딩 테스트 서막 : 1스4코1파

Rule :

하루에 1문제씩 풀기.
한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원
백준 플래티넘, 프로그래머스 4단계, 개발자 탈퇴 시 모임 탈퇴 가능

START :

[3코1파] 2023.01.04~ (119일차)
[4코1파] 2023.01.13~ (110일차)
[1스4코1파] 2023.04.12~ (21일차)

Today :

2023.05.02 [119일차]

프로그래머스 LV 2
숫자 블록
https://school.programmers.co.kr/learn/courses/30/lessons/12923

문제 설명

그렙시에는 숫자 0이 적힌 블록들이 설치된 도로에 다른 숫자가 적힌 블록들을 설치하기로 하였습니다. 숫자 블록을 설치하는 규칙은 다음과 같습니다.

블록에 적힌 번호가 n 일 때, 가장 첫 블록은 n 2번째 위치에 설치합니다. 그 다음은 n 3, 그 다음은 n * 4, ...위치에 설치합니다. 기존에 설치된 블록은 빼고 새로운 블록을 집어넣습니다.

블록은 1이 적힌 블록부터 숫자를 1씩 증가시키며 순서대로 설치합니다. 예를 들어 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 함수를 완성해 주세요.

제한사항

1 ≤ begin ≤ end ≤ 1,000,000,000
end - begin ≤ 5,000

입출력 예

입출력 예 설명

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

※ 공지 - 2019년 4월 07일 테스트케이스가 변경되었습니다.
※ 공지 - 2023년 2월 09일 지문과 테스트 케이스가 수정되었습니다. 기존에 통과되었던 코드가 통과되지 않을 수 있습니다.

문제 풀이 방법


메모리 초과에 시간 초과에 난리났다 초과 가문

뭔지 몰라서 찾아보니까.. 각 숫자에 대한 최대 약수를 구하는거란다ㅋ... 뭐야


내 코드

def solution(begin, end):
    answer = []
    if begin == 1:
        answer.append(0)
        begin += 1

    for n in range(begin, end+1):
        tmp = [1]
        for i in range(2, int(n**0.5)+1):
            if not n % i:
                tmp.append(i)
                if n // i <= 1e+7:
                    tmp.append(n // i)
        answer.append(max(tmp))
    return answer

증빙

다른 사람 풀이

2시간 씨름하다 질문하기에서 남의꺼 쌔려온거임
이제 내꺼됐지만

여담

이거 뭐임..?

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글