[Programmers] Level 2. 숫자 블록

2025. 2. 11. 21:46·코딩테스트/Python
728x90
반응형

🔗 Problem Link

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


❔Thinking

  • begin, end가 주어질 때, 해당 구간에 놓이는 숫자 블록을 반환한다.
  • 숫자 블록은 n*2, n*3, n*4 순서로 놓인다
    • n = 1인 경우, [0,1,1,1,1,1,1,1,1]
    • n = 2인 경우, [0,1,1,1,2,1,2,2,1]
    • n = 3인 경우, [0,1,1,1,2,1,3,2,1]
  • 1 <= begin <= end <= 1,000,000,000
  • 블록에 적힌 숫자 <= 10,000,000

💻Solution

from bisect import bisect_left

def find_divisors(n)->list:
    divisor_list = []
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            divisor_list.append(i)
            if i**2 != n:
                divisor_list.append((n // i))
    divisor_list.sort(reverse=True)
    return divisor_list

def solution(begin, end):
    answer = []
    for num in range(begin, end+1):
        if num == 1:
            answer.append(0)
            continue
        div_list = find_divisors(num)
        for i in div_list:
            if i * 2 <= num and i <= 10**7:
                answer.append(i)
                break
    return answer

🗝️keypoint

  1. 해당 위치에 놓이는 숫자블록은, 해당 위치보다 작은 가장 큰 숫자이다. 즉 큰 수부터 확인하여 범위에 해당한다면 탐색을 멈춘다. ( = bisect_left)
  2. 숫자의 범위가 10,000,000이므로, 이 숫자를 넘는 블록은 놓일 수 없다.
  3. 약수의 개수를 구하는 방법은, 제곱수까지만 구하는 방법을 통해 최적화 할 수 있다. (단, 9와 같은 제곱수인 경우 3이 중복되지 않도록 주의한다.)
저작자표시 (새창열림)

'코딩테스트 > Python' 카테고리의 다른 글

[Baekjoon] 2294. 동전 2  (0) 2025.02.13
[Programmers] Level 2. 도넛과 막대 그래프  (0) 2025.02.12
[Baekjoon] 2565. 전깃줄  (0) 2025.02.11
[Programmers] Level 2. 충돌위험 찾기  (0) 2025.02.09
[Baekjoon] 2573. 빙산  (0) 2025.02.07
'코딩테스트/Python' 카테고리의 다른 글
  • [Baekjoon] 2294. 동전 2
  • [Programmers] Level 2. 도넛과 막대 그래프
  • [Baekjoon] 2565. 전깃줄
  • [Programmers] Level 2. 충돌위험 찾기
swwho
swwho
일상을 데이터화하다
  • swwho
    하루한장
    swwho
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • ML_DL (39)
        • MUJAKJUNG (무작정 시리즈) (18)
        • 딥러닝 공부하기 (21)
      • 데이터사이언스 (1)
        • EDA (1)
        • 데이터과학을 위한 통계 (0)
      • 데이터엔지니어링 (2)
      • 논문리뷰 (2)
        • Computer Vision (2)
      • Python 활용하기 (12)
      • 코딩테스트 (127)
        • Python (109)
        • MySQL (14)
      • Git (3)
      • MySQL 활용하기 (0)
      • 일상 이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
swwho
[Programmers] Level 2. 숫자 블록
상단으로

티스토리툴바