문제
오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.
입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시간을 예제 출력과 같은 방식으로 출력해보자.
MenOfPassion 알고리즘은 다음과 같다.
MenOfPassion(A[], n) { sum <- 0; for i <- 1 to n - 2 for j <- i + 1 to n - 1 for k <- j + 1 to n sum <- sum + A[i] × A[j] × A[k]; # 코드1 return sum; }
|
입력
첫째 줄에 입력의 크기 n(1 ≤ n ≤ 500,000)이 주어진다.
출력
첫째 줄에 코드1 의 수행 횟수를 출력한다.
둘째 줄에 코드1의 수행 횟수를 다항식으로 나타내었을 때, 최고차항의 차수를 출력한다. 단, 다항식으로 나타낼 수 없거나 최고차항의 차수가 3보다 크면 4를 출력한다.
N= int(input())
N-=2
i=1
result=0
while (N>0):
result+=N*i
N-=1
i+=1
print(result)
print('3')
가장 처음 작성한 코드이다.
입력으로 N=7이 들어온다고 가정한다면
k=3,4,5,6,7
4,5,6,7
5,6,7
6,7
7
4,5,6,7
5,6,7
6,7
7
5,6,7
6,7
7
6,7
7
7
15+10+6+3+1 = 35이다.
즉, (N-2)+(N-3)*2+(N-4)*3+(N-4)*4 ,,, (1)*1 의 식으로 나타낼 수 있다.
따라서 위와 같이 반복문을 이용해 작성해주었는데,
시간복잡도라는 의미가 사실 다항식으로 나타내주는 게 의미가 있는 것 같고
반복문을 사용하는건 성능에 좋지않은 것도 있기 떄문에
위 코드가 좋은 것 같진 않다
최고차항의 계수가 3이니 an^3+bn+c 와 같은 형태일 것이라는 건 유추해볼 수 있겠는데
그래도 모르겠어서 다른 사람들의 코드를 참고해보았다.
참고로 print(n*(n-1)*(n-2)//6)으로 해도 된다.
그렇다고 한다.
출처 https://dev-mandos.tistory.com/124
'Back-end > 백준(python)' 카테고리의 다른 글
[백준/python] 2798 블랙잭: 3중 for-loop/ itertools 모듈과 조합 (0) | 2023.10.26 |
---|---|
[백준/python] 24313 알고리즘수업-점근적표기1: 빅오 조건 (1) | 2023.10.26 |
[백준/python] 14215 세막대: (0) | 2023.10.26 |
[백준/python] 5073 삼각형과세변: 삼각형이 될 조건 (0) | 2023.10.26 |
[백준/python] 10101 삼각형외우기: (0) | 2023.10.26 |