728x90
문제
오늘도 서준이는 점근적 표기 수업 조교를 하고 있다.
아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.
알고리즘의 소요 시간을 나타내는 O-표기법(빅-오)을 다음과 같이 정의하자.
O(g(n)) = {f(n) | 모든 n ≥ n0에 대하여 f(n) ≤ c × g(n)인 양의 상수 c와 n0가 존재한다}
이 정의는 실제 O-표기법(https://en.wikipedia.org/wiki/Big_O_notation)과 다를 수 있다.
함수 f(n) = a1n + a0, 양의 정수 c, n0가 주어질 경우 O(n) 정의를 만족하는지 알아보자.
https://www.acmicpc.net/problem/24313
입력
첫째 줄에 함수 f(n)을 나타내는 정수 a1, a0가 주어진다. (0 ≤ |ai| ≤ 100)
다음 줄에 양의 정수 c가 주어진다. (1 ≤ c ≤ 100)
다음 줄에 양의 정수 n0가 주어진다. (1 ≤ n0 ≤ 100)
출력
f(n), c, n0가 O(n) 정의를 만족하면 1, 아니면 0을 출력한다.
예제
__input__
7 7
8
1
__output__
0
문제 풀이
a1, a0 = map(int,input().split())
c = int(input())
n0 = int(input())
if a1 * n0 + a0 <= c * n0 and a1 <= c:
print(1)
else:
print(0)
초기에는 f(n) <= g(n)을 만족할 시 1을 출력하도록 작성하였으나 틀렸습니다.
a1과 a0는 모두 음수일 수 있는데요.
만약 a0가 음수일 때 a1이 c보다 크다면 f(n) > g(n)이 되기에 조건을 만족하지 못합니다.
하여 a1 <= c 조건을 추가하여 풀어주었습니다.
파이썬을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.
728x90