[C++] 24313 : 알고리즘 수업 - 점근적 표기 1

wldud·2024년 12월 5일
0

알고리즘

목록 보기
30/34

이번꺼는 테스트 코드의 해설을 보고 바로 풀어서 냈었는데 계속 91퍼에서 틀렸다고 떠서 진짜 뭐가 문제지 계속 고민했다. 그러다가 질문 게시판에서 나와같이 91퍼에서 틀렸다는 사람의 질문의 답을 보고 힌트를 얻고 다시 고민해보았다.
처음에 답글에서 n은 1~100사이 범위라고 해서 n에 n0와 100의 값을 넣었을때 성립하는지를 확인하고 성립하면 1이 출력되게 코드를 짜주었다. 그런데 n0이상의 모든 n인데 왜 통과되었는지는 모르겠지만 통과되었다,,,⁉️

그리고 또 다른 방식으로 풀어주었다.
f(n) <= c * g(n) 이라서 풀어주면 a1*n + a0 <= c * n 이고 정리해주면 (a1 - c) * n <= -a0 이다. 그래서 생각해보면 a1 - c > 0이라면 무조건 n0 이상의 n 중에서 -a0보다 큰 값이 나올 수 있으니 무조건 안되고 a1 - c <= 0 이라면 n0의 값을 넣어주었을때 식이 성립하면 1이 출력되도록 해주었다.

#include <iostream>

using namespace std;

int main(void){
  long a1,a0,c,n0;

  cin>>a1>>a0>>c>>n0;

  if((a1-c)*n0 <= -a0 && (a1<=c)){
    cout<<1;
  }else{
    cout<<0;
  }
}

0개의 댓글