문제
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"를 출력한다.
- 시간 제한: 1초 / 메모리 제한: 512MB
코드 (C99)
#include <stdio.h>
main()
{
int term, major_credit, all_credit;
scanf("%d %d %d", &term, &major_credit, &all_credit);
for (int i = 0; i < 8 - term; i++)
{
int major, select;
scanf("%d %d", &major, &select);
major_credit += major * 3;
all_credit += (major + select) * 3;
if (major + select > 6)
all_credit -= 3 * (major + select - 6);
}
if (all_credit >= 130 && major_credit >= 66)
printf("Nice");
else
printf("Nae ga wae");
return 0;
}
여담
아침이라 그런지, 머리가 잘 안 돌아가는 느낌이다.
내가 생각한 구현 방법은 다음과 같다.
전공 학점부터 채우고, 그 다음 교양을 들으면 된다는 청사진을 준비하고 코드를 작성했다.
전공 학점은 전공 & 총 학점도 올라가지만, 교양은 총 학점만 올라가기 때문이다.
전체 8학기(4년제 * 2학기) 중 이수학기를 제외한 나머지 학기 동안 루프를 돈다.
우선 전공부터 수강하고, 교양을 수강한다.
최대 6과목을 수강할 수 있으므로, 6과목 중 전공을 제외하고 남은 과목 수 만큼 교양을 수강한다.
그렇게 해서 전공 66, 총 학점 130이 넘으면 무사히 졸업할 수 있고,
그렇지 않다면 5학년을 다녀야 할 것이다.
코드가 이상하거나, 이해되지 않는 부분이 있다면 댓글 남겨주세요! + 더 좋은 풀이 방법이 있다면 알려주세요 :) |
'Programming > C언어' 카테고리의 다른 글
[백준] 27111번 : 출입 기록 (C언어 / C99) (0) | 2023.09.05 |
---|---|
[백준] 20551번 : Sort 마스터 배지훈의 후계자 (C언어 / C99) (0) | 2023.09.02 |
[백준] 10804번 : 카드 역배치 (C언어 / C99) (0) | 2023.09.01 |
[백준] 14720번 : 우유 축제 (C언어 / C99) (0) | 2023.08.26 |
[백준] 3036번 : 링 (C언어 / C99) (0) | 2023.08.23 |