문제 해석
이 문제를 이해하기 위해선 위의 코드를 분석해야 한다.
//MenOfPassion 알고리즘
MenOfPassion(A[], n) { //n이 입력받은 입력 크기이고
i = ⌊n / 2⌋; // 입력 크기를 반을 나눈 것은 i변수에 저장한 후
return A[i]; # 코드1 // A[i] 번째의 값을 반환한다.
}
둘째 줄에 코드1의 수행 횟수를 다항식으로 나타내었을 때, 최고차항의 차수를 출력한다. 단, 다항식으로 나타낼 수 없거나 최고차항의 차수가 3보다 크면 4를 출력한다.
빅오 표기법_시간 복잡도
O(1) – 상수 시간 : 문제를 해결하는데 오직 한 단계만 처리함.
*O(log n)** – 로그 시간 : 문제를 해결하는데 필요한 단계들이 연산마다 특정 요인에 의해 줄어듬.
O(n) – 직선적 시간 : 문제를 해결하기 위한 단계의 수와 입력값 n이 1:1 관계를 가짐.
O(n log n) : 문제를 해결하기 위한 단계의 수가 N*(log2N) 번만큼의 수행시간을 가진다. (선형로그형)
O(n^2) – 2차 시간 : 문제를 해결하기 위한 단계의 수는 입력값 n의 제곱.
O(C^n) – 지수 시간 : 문제를 해결하기 위한 단계의 수는 주어진 상수값 C 의 n 제곱.
정말 깔끔하게 정리하신 분의 블로그(덕분에 다시 공부했다.)
너무 돌아왔지만, 다시 말해 둘째 줄에 출력하는데, 최고차항의 차수는 빅오표기법의 시간 복잡도의 제곱승을 의미한다.
만약, 해당 시간복잡도 식이 n^5 + 2n^3 + 10; 이 나왔다고 가정했을 때
빅오표기법의 시간복잡도롤 나타내면 O(n^5)이다.
=> 빅오표기법의 시간복잡도의 계산자체가 최고차항의 차수만 남기고 버리니까(?) 아마 이걸 말하는게 아닌가? 싶다!
=> 다시 문제로 돌아가면,
> 다항식으로 나타낼 수 없거나 최고차항의 차수가 3보다 크면 4를 출력한다.
설명이 너무 길어졌지만, 사실 이 문제는 이렇게 장황하게 설명할 필요가 없다.
이미 답은 나왔기 때문!
위에 설명한 바와 같이 이 24262번 문제는 어떤 숫자를 입력해도 수행횟수가 1번이고, 수행시간은 O(1)이다.
그냥, 1과 0을 줄바꿈해서 출력하면 됨....
코드
public class Main {
public static void main(String[] args) {
//어떤 수가 들어와도 값은 똑같기 때문에 입력받지 않아도 됨
System.out.println(1);
System.out.println(0);
}
}
결과
느낀점