문제
- O(g(n)) = {f(n) | 모든 n ≥ n0에 대하여 f(n) ≤ c × g(n)인 양의 상수 c와 n0가 존재한다}
- 함수 f(n) = a1n + a0, 양의 정수 c, n0가 주어질 경우 O(n) 정의를 만족하는지 알아보자.
입력
- 첫째 줄에 함수 f(n)을 나타내는 정수 a1, a0가 주어진다. (0 ≤ |ai| ≤ 100)
- 다음 줄에 양의 정수 c가 주어진다. (1 ≤ c ≤ 100)
- 다음 줄에 양의 정수 n0가 주어진다. (1 ≤ n0 ≤ 100)
문제 해석
콘솔로부터 f(n)의 a1과 a0, c, n을 입력받해당 알고리즘은 모든 n ≥ n0에 대하여 f(n) ≤ c × g(n)을 만족하는 지(1) 아닌지(0) 를 출력하면 된다.
예시
틀린 코드
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int a1 = Integer.parseInt(st.nextToken());
int a0 = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(br.readLine());
int n0 = Integer.parseInt(br.readLine());
int n = 1;
br.close();
boolean result = true;
while(n <= n0){
if(a1*n0 + a0 > c*n0){
result = false;
break;
}
n++;
}
if(result) {
bw.write(1 + "");
}else{
bw.write(0 + "");
}
bw.flush();
bw.close();
}
}
결과1
코드(참고)
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int a1 = Integer.parseInt(st.nextToken());
int a0 = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(br.readLine());
int n0 = Integer.parseInt(br.readLine());
br.close();
if (a1*n0 + a0 <= c*n0 && c >= a1) { //참인 경우를 if문으로 만들어 작성한 것을 볼 수 있다.
bw.write("1");
} else {
bw.write("0");
}
bw.flush();
bw.close();
}
}
결과
느낀점
.. 우연히 이 포스트를 보게 되신다면, 이 문제 설명 부탁드립니다. (뭔가 제대로 이해한건지 헷갈려서 모르겠네요..) 😢😢😢😢
문제 조건을 만족하기 위한 부등식
a1 * n + a0 <= c * n
a0 <= (c - a1) * n
n0는 n에 들어갈 수 있는 가장 작은 숫자다.
즉, (c - a1) * n0 가 우항의 최소값이다.
따라서 n에 n0가 들어갔을 때 이것이 반드시 참이어야만 한다. (1번 조건)
a0와 n이 반드시 양의 정수이므로, c - a1이 음의 정수라면 위 부등식은 반드시 거짓이 된다.
따라서 c - a1은 반드시 양수 또는 0이어야만 한다. (2번 조건)
저는 이렇게 이해했습니다.