
문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
이산 수학 교수님은 학생들의 수업을 하려고 한다. 학생들의 지각에 좌절한 교수는 수업이 시작될 때 일정 수 이하의 학생만 출석하면 수업을 취소하기로 결심했다. 학생들의 도착 시간은 정시(arrivalTime <= 0)부터 지각(arrivalTime > 0)까지 이다.
학생들의 도착 시간과 최소 출석 인원이 주어졌을 때, 수업이 취소되는지 구하여라.
n = 5
k = 3
a = [-2, -1, 0, -1, -2]
앞에 3명의 학생이 도착하고, 뒤에 2명의 학생이 늦었다. 3명의 학생이 교실에 있어서 수업은 진행할 것이다. 수업이 시작할 것이므로 YES를 반환한다.
도착 시간이 0보다 작거나 같으면 일찍 도착하거나 정시에 도착한 것이고, 0보다 크면 늦게 도착한 것이다.
angryProfessor 함수를 완성해라.
angryProfessor 함수는 아래와 같은 매개변수를 가지고 있다.
정렬을 먼저 한다. 정시까지 도착한 학생들의 수를 구해서 반복문을 빠져나오기 위함이다.
a.sort(Comparator.naturalOrder());
정시까지 도착한 학생들의 수를 구할 변수를 선언하고 0을 할당한다.
반복문을 통해 도착 시간을 순회한다. 이때 도착 시간이 0보다 작거나 같으면 변수에 1을 증가시켜서 할당하고, 그렇지 않은 경우 반복문에서 빠져나온다.
int student = 0;
for(int i = 0; i < a.size(); i++){
if(a.get(i) <= 0){
student++;
}else{
break;
}
}
마지막으로 지각하지 않은 학생이 k보다 크거나 같으면 수업이 취소되지 않았으므로 NO, 그렇지 않으면 수업이 취소 되어서 YES를 반환한다.
if(student >= k){
return "NO";
}else{
return "YES";
}
public static String angryProfessor(int k, List<Integer> a) {
a.sort(Comparator.naturalOrder());
int student = 0;
for(int i = 0; i < a.size(); i++){
if(a.get(i) <= 0){
student++;
}else{
break;
}
}
if(student >= k){
return "NO";
}else{
return "YES";
}
}