일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 빅데이터
- 데이터분석전문가
- 위대한 수업
- python
- Baekjoon
- MySQL
- 조지프 나이
- ADP
- 정치학
- 백준
- 후기
- KMOOC
- Joseph Samuel Nye Jr.
- 당신이 몰랐던 진화론
- 코테
- 맛집
- ADsP
- 누가 진정한 리더인가
- Udemy
- 미분적분학
- Hacker Rank
- Great Minds
- 알고리즘
- EBS
- 데이터분석전문가가이드
- CNN10
- 자료구조
- Progate
- K-MOOC
- 공부정리
- Today
- Total
ㅇ
[BAEKJOON] 11단계_시간 복잡도 본문
julia319 정보
시도했지만 맞지 못한 문제
www.acmicpc.net
24262번 알고리즘 수업 - 알고리즘의 수행 시간 1
계산을 한 번만 한다. 또한 언제해도 1번이므로 다항식으로 표현하는 경우 O(n) = c 이므로 다항식 최고 차항 차수는 0이다.
# MenOfPassion(A[], n) {
# i = ⌊n / 2⌋;
# return A[i]; # 코드1
# }
N = int(input())
# 수행횟수
cnt = 1
# 수행횟수 다항식 표현 최고차항 차수
ans = 0
print(cnt)
print(ans)
24263번 알고리즘 수업 - 알고리즘의 수행 시간 2
for문을 1부터 n까지 수행하므로, 계산을 n번 한다. 다항식으로 표현하는 경우 O(n) = n 이므로 다항식 최고 차항 차수는 1이다.
# MenOfPassion(A[], n) {
# sum <- 0;
# for i <- 1 to n
# sum <- sum + A[i]; # 코드1
# return sum;
# }
N = int(input())
# 수행횟수
cnt = N
# 수행횟수 다항식 표현 최고차항 차수
ans = 1
print(cnt)
print(ans)
24264번 알고리즘 수업 - 알고리즘의 수행 시간 3
for문을 1부터 n까지 두 번 수행하므로, 계산을 n * n 번 한다. 다항식으로 표현하는 경우 O(n) = n^2 이므로 다항식 최고 차항 차수는 2이다.
# MenOfPassion(A[], n) {
# sum <- 0;
# for i <- 1 to n
# for j <- 1 to n
# sum <- sum + A[i] × A[j]; # 코드1
# return sum;
# }
N = int(input())
# 수행횟수
cnt = N ** 2
# 수행횟수 다항식 표현 최고차항 차수
ans = 2
print(cnt)
print(ans)
24265번 알고리즘 수업 - 알고리즘의 수행 시간 4
for문을 두 번 수행하는데, i의 for문에서 i가 하나씩 늘 때마다 j의 for문에서는 각 n-1번, n-2번, ... , 1번 수행하므로, 계산을 1부터 n-1을 다 더한 횟수만큼 한다. 다항식으로 표현하는 경우 O(n) = n(n-1) / 2 이므로 다항식 최고 차항 차수는 2이다.
# MenOfPassion(A[], n) {
# sum <- 0;
# for i <- 1 to n - 1
# for j <- i + 1 to n
# sum <- sum + A[i] × A[j]; # 코드1
# return sum;
# }
# i: 1, j: 2~n 수행, i: 2, j: 3~n 수행 ... i: n-1, j: n~n 수행
# 총 시행 횟수: 1 + 2 + ... + n-2 + n-1
# 1~n-1까지 더하는 공식, n(n-1) / 2
N = int(input())
# 수행횟수
cnt = int(N*(N-1) / 2)
# 수행횟수 다항식 표현 최고차항 차수
ans = 2
print(cnt)
print(ans)
24266번 알고리즘 수업 - 알고리즘의 수행 시간 5
for문을 1부터 n까지 세 번 수행하므로, 계산을 n * n * n 번 한다. 다항식으로 표현하는 경우 O(n) = n^3 이므로 다항식 최고 차항 차수는 3이다.
# MenOfPassion(A[], n) {
# sum <- 0;
# for i <- 1 to n
# for j <- 1 to n
# for k <- 1 to n
# sum <- sum + A[i] × A[j] × A[k]; # 코드1
# return sum;
# }
N = int(input())
# 수행횟수
cnt = N ** 3
# 수행횟수 다항식 표현 최고차항 차수
ans = 3
print(cnt)
print(ans)
24267번 알고리즘 수업 - 알고리즘의 수행 시간 6
for문을 두 번 수행하는데, i의 for문에서 i가 하나씩 늘 때마다 j의 for문에서는 각 n-2번, n-3번, ... , 1번 수행하고, j의 for문에서 j가 하나씩 늘 때마다 k의 for문에서는 각 n-2번, n-3번, ... , 1번 수행한다.
따라서 sigma합 공식을 이용하여 계산하는 것이 훨씬 간단하다.
다항식으로 표현하는 경우 O(n) = n(n-1)(n-2) / 6 이므로 다항식 최고 차항 차수는 3이다.
# 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;
# }
# i: 1, j: 2 ~ n-1, n-2번 수행, i: 2, j: 3 ~ n-1, n-3번 수행 ... i: n-2, j: 1번 수행
# i의 총 시행 횟수 n-2번 일 때 j의 총 시행 횟수: n-2 + n-3 + ... + 2 + 1번
# j: 2, k: 3 ~ n, n-2번 수행, j: 3, j: 4 ~ n, n-3번 수행 ... j: n-1, k: 1번 수행
# j의 총 시행 횟수: n-2번일 때 k의 총 시행 횟수: n-2 + n-3 + ... + 2 + 1번
# sigma합 이용하여 풀면 훨씬 쉬운 문제
# n-2 n-1 n
# sigma sigma sigma 1 을 풀이한다.
# i = 1 j = i+1 k = j+1
# n-2 n-1
# sigma sigma {n - (j+1 - 1)} * 1
# i = 1 j = i+1
# n-2 n-1
# sigma sigma n-j
# i = 1 j = i+1
# n-2
# sigma [{(n-1) - (i+1 - 1)} * n] - [n*(n-1) / 2 - i*(i+1) / 2]
# i = 1
# n-2
# sigma {n(n -1 -i)} - {(n^2 - n - i^2 -i )/ 2}
# i = 1
# n-2
# sigma (n^2 -n +i^2 -(2n-1)i) / 2
# i = 1
# [{(n-2) * (n^2-n)} + {(n-2)*(n-1)*(2*n-3)} / 6 - (2n-1) * (n-2)(n-1)/2] /2
# (n-2)*(n-1)*n/6
N = int(input())
# 수행횟수
cnt = int(N*(N - 1)*(N - 2) / 6)
# 수행횟수 다항식 표현 최고차항 차수
ans = 3
print(cnt)
print(ans)
24313번 알고리즘 수업 - 점근적 표기 1
f(n)과 c x g(n) 사이의 관계를 그래프로 그리면서 상황을 나누었다.
- 기울기가 다르다면
- f(n)이 c x g(n)보다 클 때
- f(n)보다 c x g(n)이 클 때
- f(n)과 c x g(n)의 교점보다 기준점 n0가 더 크거나 같을 때
- f(n)과 c x g(n)의 교점보다 기준점 n0가 더 작을 때
- 기울기가 같다면
- f(n)의 y절편인 a0가 0보다 작거나 같다
- f(n)의 y절편인 a0가 0보다 크다
# O(g(n)) = {f(n) | 모든 n ≥ n0에 대하여 f(n) ≤ c × g(n)인 양의 상수 c와 n0가 존재한다}
# f(n) = a1 × n + a0
# g(n) = n
a1, a0 = map(int, input().split())
c = int(input())
n0 = int(input())
# f(n)과 c × g(n)의 기울기가 다르다면
if a1 != c:
# 만약 f(n)의 기울기가 c × g(n)의 기울기보다 크다면 1보다 큰 n0에서는 항상 f(n)이 크다
if c < a1:
ans = 0
else:
# f(n) = c × g(n) 인 n을 구해
n = a0 / (c - a1)
# n0가 그 이상이라면 True
if n <= n0:
ans = 1
else:
ans = 0
# f(n)과 c × g(n)의 기울기가 같다면
else:
# f(n)의 y절편인 a0가 0보다 작거나 0이어야 f(n) ≤ c × g(n)
if a0 <= 0:
ans = 1
else:
ans = 0
print(ans)
'IT > 코테문제' 카테고리의 다른 글
[BAEKJOON] 12단계_브루트 포스 (0) | 2023.11.02 |
---|---|
[BAEKJOON] 10단계_기하: 직사각형과 삼각형 (0) | 2023.10.31 |
[BAEKJOON] 9단계_약수, 배수와 소수 (0) | 2023.10.30 |
[BAEKJOON] 8단계_일반 수학1 (0) | 2023.10.27 |
[BAEKJOON] 7단계_ 2차원 배열 (1) | 2023.10.26 |