https://www.acmicpc.net/problem/23028
문제
5학년은 다니기 싫은 아리는 4학년까지 졸업 학점을 채워 졸업할 수 있는지 궁금해졌다. 아리가 졸업하려면 총 130학점 이상 들어야 하고, 그중 66학점 이상은 전공학점이어야 한다. 아리는 현재 2021년 2학기까지 N학기를 마쳤고, 전공학점 A를 포함하여 총 B학점을 이수하였다. 고민하던 아리는 학교 홈페이지에서 다음과 같은 공지가 올라온 것을 확인했다.
2022년 1학기부터 2026년 2학기까지 10개의 학기 동안 개설되는 과목의 수를 공지합니다.
- 2022년 1학기 : 전공과목 X1개, 비전공 과목 Y1개
- 2022년 2학기 : 전공과목 X2개, 비전공 과목 Y2개
- 2023년 1학기 : 전공과목 X3개, 비전공 과목 Y3개
⋮
- 2026년 2학기 : 전공과목 X10개, 비전공 과목 Y10개
2022년 1학기부터는 한 학기에 전공 수업과 비전공 수업을 포함하여 최대 6과목을 수강할 수 있습니다.
한 과목을 수강하게 되면 3학점을 얻게 되고, 그러므로 한 학기에 최대 18학점을 이수할 수 있습니다. 참고하시기 바랍니다.
각 수업은 시간표가 서로 겹치지 않아서 아리는 원하는 수업을 모두 수강할 수 있다. 아리는 최대한 빨리 졸업을 하고 싶어서 휴학을 하지 않는다. 아리를 도와 아리가 전에 마쳤던 학기를 포함하여 총 8학기 안에 졸업할 수 있는지 확인하는 프로그램을 작성해보자.
입력
세 정수 N(1 ≤ N ≤ 7), A(1 ≤ A ≤ 150), B(A ≤ B ≤ 150)이 주어진다.
다음 10개 줄에는 2022년 1학기부터 2026년 2학기까지 차례대로 학기에 개설되는 과목의 수가 주어지고, 한 줄에 한 학기의 전공과목 수 X(1 ≤ X ≤ 6), 비전공 과목 수 Y(1≤ Y ≤ 6)이 주어진다.
출력
총 8학기 안에 졸업 조건을 맞출 수 있다면 "Nice"를, 불가능하다면 "Nae ga wae"를 출력한다.
아리가 N학기를 다녔고 현재 전공 학점이 A이고 현재 전체 학점이 B일떄 8학기 안에
전공학점이 66점이상, 전체 학점이 130점 이상이 되면 졸업을 할 수 있는데 , 아리가 졸업을 할 수 있는지 구하는 문제이다.
2022 -1 학기부터 2026-2 학기 까지 10개의 줄에 전공과목 , 비전공과목의 수가 주어지고 (각각 최대 6개)
아리가 신청 할 수 있는 최대의 과목은 6과목이다(전공과목 + 비전공과목)
일단 n을 입력받고 10개 줄 입력받으면서 n을 증가시킨다 . 이때 n이 8을 넘어가면 안되므로 8을 넘어가면 for문을 탈출시킨다.
그리고 전공과목부터 학점을 먹는데, 전공과목을 K만큼 먹으면 비전공 과목은 6-K 만큼 먹을 수 있는데,
비전공과목의 수가 L이라고 할 때,
L >= 6-K라면 비전공과목을 6-K만큼 먹고
L < 6-K라면 비전공과목을 L만큼 먹으면된다.
#include <iostream>
#include <string>
using namespace std;
int main(void){
int max_major = 66; //졸업하려면 전공과목의 학점이 66학점 이상
int max_total = 130; //졸업하려면 전체 학점이 130학점 이상
int max_semester = 8;
int n,major,total;
cin >> n >> major >> total;
/*이미 졸업 가능한 경우*/
if(major >= max_major && total >= max_total){
cout << "Nice";
return 0;
}
/*n이 8보다 크면 탈출 */
for(int i = 0;i<10;i++){
n++;
if(n > max_semester){
break;
}
/*학기에 열리는 전공과목,비전공과목의 개수 (각각 alpha,beta)*/
int alpha,beta;
cin >> alpha >> beta;
major = major + (alpha * 3);
int temp = 6 - alpha;
total = total + (alpha * 3);
if(temp <= beta){ //
total = total + (temp * 3);
}
else{
total = total + (beta * 3);
}
}
if(major >= max_major && total >= max_total){
cout << "Nice";
}
else{
cout << "Nae ga wae";
}
}
'알고리즘' 카테고리의 다른 글
백준 18353 C++ (0) | 2022.06.27 |
---|---|
백준 2061 Python (0) | 2022.06.20 |
플로이드-와샬 알고리즘(C++) (0) | 2022.06.16 |
백준 6443 애너그램 C++ (next_permutation) (0) | 2022.06.15 |
백준 21759 꿀따기 C++ (0) | 2022.06.13 |