[작성일: 2023. 10. 10]
https://www.acmicpc.net/problem/24313
풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a1 = sc.nextInt();
int a0 = sc.nextInt();
int c = sc.nextInt();
int n0 = sc.nextInt();
boolean bigO = true;
for (int i = n0; i <= 100; i++) {
if (a1 * i + a0 > c * i) {
bigO = false;
break;
}
}
System.out.println(bigO ? 1 : 0);
}
}
사실 이 문제는 아직도 이해가 잘 안 되는데 풀고나서 역으로 공부했다.
우선 f(n) = a1n + a0의 값을 c*n과 비교해야 한다. 만약 f(n)이 c*n보다 크거나 같다면 O(n) 정의를 만족하지 않는다. (f(n)이 c*n보다 항상 작거나 같다는 것을 의미한다.)
하지만 모든 n에 대해서는 검사할 필요가 없고, 문제에서 n >= n0인 경우메나 검사하면 된다고 했으므로 for문의 시작은 n0부터 100까지로 했다.
조건을 만족하지 않는다면 bigO 변수를 false로 설정하고 루프를 빠져나온다.