사진의 솔루션을 반복문을 쓰지 않고 구할 수 있는 공식이 있을까요??

조회수 448회

이미지

알고리즘 문제를 풀다가 시간단축을 하고 싶어서 질문드립니다!

그림같은 규칙으로 숫자들이 나열돼 있을 때 , 반복문을 쓰지 않고 임의의 숫자가 왼쪽에서 몇 번째에 있는 수인지 구할 수 있는 공식이 있을까요?

예를 들어 31을 입력하면 8을 구해내는 공식이 있다면 알고 싶습니다!

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • Sn = 1, 3, 6, 10, ... (계단의 가장 윗줄의 숫자들)

    S1 = 1, S2,= 3, ... 잘 알려진 1부터 n까지의 합. Sn = n(n+1)/2

    Tn = 1, 2, 4, 7, ... (그림의 가장 아랫줄의 숫자들)

    Tn = S(n-1)+1 = n(n-1)/2 + 1 = (n^2 - n + 2)/2

    x 가 주어졌을 때 원하는 n 은,

    1. 일단, x 가 맨 아래줄의 값일 경우에 Tn = x 를 만족하는 n을 구하면 됨. n의 2차방정식. 근의공식 중에 양수근을 선택.
    2. x 가 맨 아래줄의 값이 아닌 경우에는, Tn=x 를 풀면, n이 정수값이 나오지 않지만, int 를 하여서 내림하면, 원하는 n이 구해짐.
    >>> def n(x):
        return int((1+(8*x-7)**.5)/2)
    
    >>> for i in range(1, 32):
        print(i, n(i))
    
    
    1 1
    2 2
    3 2
    4 3
    5 3
    6 3
    7 4
    8 4
    9 4
    10 4
    11 5
    12 5
    13 5
    14 5
    15 5
    16 6
    17 6
    18 6
    19 6
    20 6
    21 6
    22 7
    23 7
    24 7
    25 7
    26 7
    27 7
    28 7
    29 8
    30 8
    31 8
    
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)