사진의 솔루션을 반복문을 쓰지 않고 구할 수 있는 공식이 있을까요??
조회수 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 은,
- 일단, x 가 맨 아래줄의 값일 경우에
Tn = x
를 만족하는 n을 구하면 됨. n의 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
- 일단, x 가 맨 아래줄의 값일 경우에
댓글 입력