Algorithm_PS

백준 24313_<알고리즘 수업 - 점근적 표기 1>

Frisbeen 2023. 11. 10. 19:33

24313번: 알고리즘 수업 - 점근적 표기 1 (acmicpc.net)

 

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-표기법(빅-오)을 다음과 같이 정의하자.

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

이게 전제조건인데 보면 주어진 양수 이상의 모든 구간에 대해 저 조건을 만족하는것을 O()로 정의했다.사실 "여기서 o(N)의 정의를 만족하는지 물어봤기에 G(N)= N인것을 알 수 있고이제는 f(n) ≤ c × g(n)의 대소비교를 하는 코드를 구현하면 끝.

 

sol1.

일차함수의 관점으로 문제 접근했다.

h(n)=cg(n)-f(n)으로 정의하자. 그렇다면 h(n)은 n에 대한 일차식일 것. 주어진 n의 range는 무조건 양수이다.

즉 양수~양의 무한대 의 구간에서 늘 0보다 커야한다.

 

일단 3개의 관점에서 볼수있다.

1. h(n)의 n의 계수가 0보다 클때

 

2. h(n)의 n의 계수가 0일때 - 이땐 상수인 a0만 남으니

이 값이 0보다 작아야 만족

 

3. h(n)의 n의 계수가 0보다 작을떄

이러면 무조건 조건을 만족할수 없겠다.

 

즉 조건문 한 큐로 문제는 끝난다.

f(n) ≤ c × g(n) AND N의 계수>=0 

이 조건 하나가 문제의 조건을 다 커버가능.

 

문제가 어렵지 않았던건 양의정수 n0이라서 양수부분만 따지면 ㅇㅋ

 

 

 

*INPUT의 조견.

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

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

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

 

package 백준;
import java.util.*;
public class _24313_알고리즘점근적표기 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a1 = sc.nextInt(); //n의 계수
		int a0 = sc.nextInt(); //fn의 상수 둘다 정수
		
		int g계수 = sc.nextInt(); //양의 정수
		int n = sc.nextInt(); //양의 정수 range
		
		int gf=(g계수-a1)*n-a0;
		int n의계수 = g계수-a1;
		
		if(a1*n+a0<=g계수*n && n의계수 >=0 ) {
			System.out.println(1);
		}
		else {
			System.out.println(0);
		}
		sc.close();
		
	}

}

'Algorithm_PS' 카테고리의 다른 글

백준 10989 <수 정렬하기 3>  (1) 2023.11.17
백준 1018 <체스판 다시 칠하기>  (0) 2023.11.11
백준_2745 <진법 변환>  (1) 2023.10.26
백준_2563 <색종이>  (0) 2023.10.20
백준_10798(세로읽기)  (0) 2023.10.19