728x90
728x90

문제

오늘도 서준이는 점근적 표기 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.

알고리즘의 소요 시간을 나타내는 O-표기법(빅-오)을 다음과 같이 정의하자.

 

O(g(n))={f(n) | 모든 nn0에 대하여 f(n)c×g(n)인 양의 상수 c와 n0가 존재한다.}

 

이 정의는 실제 O-표기법(https://en.wikipedia.org/wiki/Big_O_notation)과 다를 수 있다.

함수 $f(n) = a_{1}n + a_{0},c,n0O(n)$ 정의를 만족하는지 알아보자.

 

입력

첫째 줄에 함수 f(n)을 나타내는 정수 a1,a0가 주어진다. (0|ai|100)

다음 줄에 양의 정수 c가 주어진다. (1c100)

다음 줄에 양의 정수 n0가 주어진다. (1n0100)

 

출력

f(n),c,n0O(n) 정의를 만족하면 1, 아니면 0을 출력한다.

 

예제 입력 1 

7 7
8
1

 

예제 출력 1 

0

f(n)=7n+7,g(n)=n,c=8,n0=1이다. f(1)=14,c×g(1)=8이므로 O(n) 정의를 만족하지 못한다.

 

예제 입력 2 

7 7
8
10

 

예제 출력 2 

1

f(n)=7n+7,g(n)=n,c=8,n0=10이다. 모든 n10에 대하여 7n+78n 이므로 O(n) 정의를 만족한다.

 

알고리즘 분류

  • 수학

 

문제 출처

https://www.acmicpc.net/problem/24313

 

24313번: 알고리즘 수업 - 점근적 표기 1

f(n) = 7n + 7, g(n) = n, c = 8, n0 = 1이다. f(1) = 14, c × g(1) = 8이므로 O(n) 정의를 만족하지 못한다.

www.acmicpc.net

 


 

문제 해결 방법

  • 문제에서 주어진 조건은 다음과 같다.
O(g(n))={f(n) | 모든 nn0에 대하여 f(n)c×g(n)인 양의 상수 c와 n0가 존재한다.}

 

  • 문제에서 f(n)=a1n+a0이고, c,n00이라는 조건이 주어졌다.
  • 문제에서 g(n)=n이라고 제시되었기 때문에 g(n)=n이다.
  • 입력값a1,a0,c,n0이다.
  • 이를 토대로 정리해보면 다음과 같다.
a1n+a0cn(nn0)

 

  • 따라서 위의 조건을 만족시킬 경우, 1을, 그렇지 않을 경우 0을 출력시키면 된다. 코드로 작성해보면 다음과 같다.
if (a1 * n + a0 <= c * n) {
return true;
}

 

  • 하지만, a0음수인 경우도 생각해주어야 한다.
  • 예를 들어, 5n33n이고, n0=1일 경우
    • n=1일 때 만족한다. (23)
    • 하지만 n=2일 때 만족하지 않는다. (76)
  • 따라서, a1c 라는 조건을 추가적으로 추가해주어야 한다. 
if (a1 * n + a0 <= c * n) {
if (a1 <= c) {
return true;
}
else {
return false;
}
}
else {
return false;
}

 

코드

#include <iostream>
using namespace std;
int a1, a0, c, n0;
void Input() {
cin >> a1 >> a0 >> c >> n0;
}
bool Solution(int a1, int a0, int c, int n) {
if (a1 * n + a0 <= c * n) {
if (a1 <= c) {
return true;
}
else {
return false;
}
}
else {
return false;
}
}
void Output() {
cout << Solution(a1, a0, c, n0) << '\n';
}
void Solve() {
Input();
Output();
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
Solve();
return 0;
}

 

채점 결과

 

참고

  • [단계별로 풀어보기] > [시간 복잡도]
  • 실버V
728x90
728x90

문제입력출력예제 입력 1 예제 출력 1 예제 입력 2 예제 출력 2 알고리즘 분류문제 출처문제 해결 방법코드채점 결과참고