하루하루 꾸준히, 인생은 되는대로

알고리즘

백준 23028 C++

긤효중 2022. 6. 17. 22:46

https://www.acmicpc.net/problem/23028

 

23028번: 5학년은 다니기 싫어요

2022년 1학기에는 전공 수업이 4과목, 비전공 수업이 3과목이 주어진다. 아리는 전공 2과목, 비전공 2과목을 듣게 되면 전공학점이 66학점, 총 학점이 132학점이 된다. 그래서 총 8학기 안에 졸업을

www.acmicpc.net

문제

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