언젠가는 펼쳐 볼 아카이브

[BOJ] 24313번 - 알고리즘 수업 - 점근적 표기 1 본문

IT/Baekjoon Oline Judge

[BOJ] 24313번 - 알고리즘 수업 - 점근적 표기 1

개발자희망생고롸파덕 2023. 10. 12. 02:01

사용언어 : javascript - node.js

 

# 문제

출처 : 백준 온라인

 

#접근방법

문제에서 제시한 O-표기법을 식으로 표현하면 다음과 같다.

 

a1*n + a0 <= c*n

((a1-c)n + a0 <= 0) === ((a1-c)n0 + a0 <= 0)

 

위 식을 토대로 입력으로 들어온 a1, a0, n0, c 값을 이용해 O(n)의 정의를 코드로 구현하면 된다. 

여기서 주의해야 할 점은, (a1-c) 부분이 양수일 경우, 전체 식의 결과가 "0이거나 음수"가 아닌 값(<=0)이 나올 수 있는 상황이 존재 한다.

따라서 (a1-c) 값은 항상 0보다 작아야 하는 조건을 추가해줘야 한다.

 

#제출코드

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : 'input.txt';
const [aList, c, n0] = fs.readFileSync(filePath).toString().trim().split('\n');
const [a1, a0] = aList
  .trim()
  .split(' ')
  .map((item) => +item);

console.log(solution(a1, a0, +c, +n0));

function solution(a1, a0, c, n0) {
  const fn = a1 * n0 + a0;
  const gn = c * n0;

  return fn <= gn && a1 - c <= 0 ? 1 : 0;
}