HackerRank Angry Professor Problem Solution
In this post, We are going to solve HackerRank Angry Professor Problem. A Discrete Mathematics professor has a class of students. Frustrated with their lack of discipline, the professor decides to cancel a class if fewer than some number of students are present when class starts. Arrival times go from on time (arrival time ≤ 0) to arriving late (arrival Time > 0).
Given the arrival time of each student and a threshold number of attendees, determine if the class is canceled.
Example
n = 5
k = 3
a = [-2, -1, 0, 1, 2]
The first 3 students arrived. The last 2 were late. The threshold is 3 students, so the class will go on. Return YES.
Note: Non-positive arrival times (a[i] < 0) indicate the student arrived early or on time; positive arrival times (a[i] > 0) indicate the student arrived a[i] minutes late.
Function Description
Complete the angryProfessor function in the editor below. It must return YES if the class is canceled, or NO otherwise.
angryProfessor has the following parameter(s):
- int k: the threshold number of students
- int a[n]: the arrival times of the n students
Input Format
The first line of input contains t, the number of test cases.
Each test case consists of two lines.
The first line has two space-separated integers, n and k, the number of students (size of a) and the cancellation threshold.
The second line contains n space-separated integers (a[1], a[2],…, a[n]) that describe the arrival times for each student.
Constraints
- 1≤t≤ 10
- 1 ≤ n ≤ 1000
- 1 ≤ k ≤ n
- -100 ≤ a[i] < 100, where i Є [1,…….n]
Sample Input
2
4 3
-1 -3 4 2
4 2
0 -1 2 1
Sample Output
YES
NO
Explanation
For the first test case, k = 3. The professor wants at least 3 students in attendance, but only 2 have arrived on time (-3 and -1) so the class is canceled. For the second test case, k = 2. The professor wants at least 2 students in attendance, and there are 2 who arrived on time (0 and -1). The class is not canceled.
Angry Professor C Solution
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int N=0,K=0,count=0;
scanf("%d %d",&N, &K);
while(N--)
{
int temp=0;
scanf("%d",&temp);
if(temp<=0)
{
count++;
}
}
if(count>=K)
{
printf("%s\n","NO");
}
else
{
printf("%s\n","YES");
}
}
return 0;
}
Angry Professor C++ Solution
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int T; cin >> T;
while (T--) {
int n, k; cin >> n >> k;
vector<int> a(n);
for (int& i : a)
cin >> i;
int attend = count_if(a.begin(), a.end(), [&](int i) {return i <= 0;});
cout << (attend >= k ? "NO\n" : "YES\n");
}
return 0;
}
Angry Professor C Sharp Solution
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Solution {
static void Main(String[] args) {
va numberOfTestCases = int.Parse(Console.ReadLine());
for(int i = 0; i<numberOfTestCases; i++){
var k = int.Parse(Console.ReadLine().Split(' ')[1]);
var onTimeCount = Console.ReadLine().Split(' ').Select(x => int.Parse(x)).Count(x => x <= 0);
Console.WriteLine(onTimeCount < k ? "YES" : "NO");
}
}
}
Angry Professor Java Solution
import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;
class Result {
/*
* Complete the 'angryProfessor' function below.
*
* The function is expected to return a STRING.
* The function accepts following parameters:
* 1. INTEGER k
* 2. INTEGER_ARRAY a
*/
public static String angryProfessor(int k, List<Integer> a)
{
int count=0;
for(int i=0;i<a.size();i++)
{
if(a.get(i)<=0)
{
count++;
}
}
return ((count>=k)?"NO":"YES");
}
}
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
int t = Integer.parseInt(bufferedReader.readLine().trim());
IntStream.range(0, t).forEach(tItr -> {
try {
String[] firstMultipleInput = bufferedReader.readLine().replaceAll("\\s+$", "").split(" ");
int n = Integer.parseInt(firstMultipleInput[0]);
int k = Integer.parseInt(firstMultipleInput[1]);
List<Integer> a = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
.map(Integer::parseInt)
.collect(toList());
String result = Result.angryProfessor(k, a);
bufferedWriter.write(result);
bufferedWriter.newLine();
} catch (IOException ex) {
throw new RuntimeException(ex);
}
});
bufferedReader.close();
bufferedWriter.close();
}
}
Angry Professor JavaScript Solution
function processData(input) {
var dados = input.split("\n"),
casos = [],
alunos = [],
aux, cont = 0;
for (var i = 0; i < dados[0]; i++) {
aux = (i * 2) + 1;
casos = dados[aux].split(" ");
alunos = dados[aux + 1].split(" ");
cont = 0;
for (var j = 0; j < casos[0]; j++) {
if (alunos[j] <= 0) {
cont++;
}
}
if (casos[1] <= cont) {
console.log("NO");
}else{
console.log("YES");
}
}
}
process.stdin.resume();
process.stdin.setEncoding("ascii");
_input = "";
process.stdin.on("data", function (input) {
_input += input;
});
process.stdin.on("end", function () {
processData(_input);
});
Angry Professor Python Solution
cases = int(input())
answers = []
for i in range(0, cases):
(students, minStu) = [int(i) for i in input().split(" ")]
arrivalTimes = [int(i) for i in input().split(" ")]
arrivalTimes.sort()
if arrivalTimes[minStu-1] > 0:
answers.append("YES")
else:
answers.append("NO")
for i in answers:
print(i)
Other Solution