이 문제에서 현재 데이터까지 보유된 총 수업 수와 학생이 참석한 수업 수를 각각 나타내는 두 개의 숫자 M과 N이 제공됩니다. 우리의 임무는 C++에서 75%를 유지하기 위해 참석해야 하는 최소 강의 수를 찾는 프로그램을 만드는 것입니다.
문제 설명
이것은 75%의 출석률을 유지하는 대학생들의 가장 큰 관심사 중 하나입니다. 이 프로그램은 출석률 75%를 달성하기 위해 학생이 정기적으로 출석해야 하는 최소 강의 수를 계산합니다.
문제를 이해하기 위해 예를 들어 보겠습니다.
예시 1
입력 :M =32, N =20
출력 :16
설명
최소 75% 출석률을 달성하려면 학생은 최소 16개의 강의에 참석해야 합니다. 총 48개의 강의와 36개의 강의를 듣게 됩니다.
백분율 =36*100/48 =75%
예시 1
입력 :M =14, N =4
출력 :26
설명
최소 75% 출석률을 달성하려면 학생은 최소 26개의 강의에 참석해야 합니다. 이렇게 하면 총 강의 40개, 참석 강의 30개가 됩니다.
백분율 =30*100/40 =75%
솔루션 접근 방식
여기에서 학생이 참석해야 하는 강의 수를 찾아야 합니다. 한 가지 간단한 방법은 양쪽에 하나의 강의를 추가하고 나눗셈이 0.75 이상이면 추가를 중지하고 반복자의 값을 반환하는 것입니다.
우리 솔루션의 작동을 설명하는 프로그램
예시
#include <iostream> using namespace std; int maintainAtt(int M, int N) { int att = 0; while(1){ if(((N+att)*100)/(M+att) >= 75){ return att; } att++; } } int main() { int M = 23, N = 12; cout<<"The total number of lectures to be attended is "<<maintainAtt(M, N); return 0; }
출력-
The total number of lectures to be attended is 21
이 접근 방식은 O(n) 차수의 솔루션의 시간 복잡도를 만드는 루프를 사용합니다. 그러나 계산에 대한 수학 공식을 사용하여 O(1) 시간 복잡도에서 이를 수행할 수 있습니다.
75% 출석률을 유지하기 위해 참석해야 하는 최소 강의 수식은 다음과 같습니다.
$$\square\square\square\square\left(\frac{(0.75)+\square-\square}{0.25}\right)$$
우리 솔루션의 작동을 설명하는 프로그램
예시
#include <iostream> #include <math.h> using namespace std; int maintainAtt(int M, int N) { int att = ceil(((0.75*M) - N)/(0.25)); return att; } int main() { int M = 30, N = 11; cout<<"The total number of lectures to be attended is "<<maintainAtt(M, N); return 0; }
출력
The total number of lectures to be attended is 46