• 연속하는 자연수의 곱? (Python)

    2021. 10. 18.

    by. ziasu

    반응형

    1. 문제 

    - 연속하는 자연수 두 개 이상 곱해서 만들 수 있는 값을 크기 순으로 나열한 수열 arr가 있다.

    ex) 2, 6, 12, 20, 24, 30, 42...

    - 자연수 n이 매개변수로 주어질 때 arr [n]을 return 해주는 함수 만들기

    - n은 1~10^6

     

    2. 풀이

    - 일단 arr의 요소들을 나열해보며 규칙을 발견해보자

    (0) 1*2 = 2

    (1) 2*3 = 6

    (2) 3*4 = 12

    (3) 4*5 = 20

    (4) 2*3*4 = 24

    (5) 5*6 = 30

    (6) 6*7 = 42

    (7) 7*8 = 56

    (8) 3*4*5 = 60

    (9) 8*9 = 72

    (10) 9*10 = 90

    (11) 10*11 = 110

    (12) 4*5*6 or 2*3*4*5 = 120

    (13) 11*12 = 132

    (14) 12*13 = 156

    (15) 13*14 = 182

    (16) 14*15  or 5*6*7 = 210

    (17) 15*16 = 240

    (18) 16*17 = 272

    (19) 17*18 = 306

    (20) 6*7*8 = 336

    (21) 18*19 = 342

    (22) 19*20 = 380

    (23) 20*21 = 420

    (24) 21*22 = 462

    (25) 7*8*9 = 504

    (25) 22*23 = 506

    #arr의 index가 4의 배수일 때마다 연속하는 세 개의 정수가 곱해진 값이 들어가는 줄 알았으나 아닌 것을 확인

     

    - 입력 n을 받고 리스트 arr에 다양한 조건들을 비교해가며 하나씩 원소를 넣어준 후, arr의 마지막 요소를  return 하는 방식?

    ex) n=7라면? (위에 있는 표는 arr, 아래에 있는 표는 dp)

    1)

    2
        2              

    2)

    2 6
        2 6            

    3)

    2 6 12
        2 6 20          

    4)

    2 6 12 20
        2 6 12 20        

    5)

    2 6 12 20 24
        2 (6) 12,24 20        

    6)

    2 6 12 20 24 30
        2   12,24 20 30      

    7)

    2 6 12 20 24 30 42
        2   12,24 20 30 42    

     

    dp의 인덱스 i에는 i로 끝나는 값들이 저장되어 있다.

     

    위의 그림과 같이 새로운 요소를 arr에 넣을 때는 다음의 조건들을 고려해야 한다.

    #n*(n-1) vs (n보다 작은 dp 인덱스를 훑으면 그 요소에 n을 곱한 값) -> 더 작은 값을 arr에 넣어준다.

    #dp에 있는 요소를 활용하여 arr를 채운 경우에는 dp를 규칙에 맞게 갱신해 줌

    반응형

    댓글