알고리즘 공부/CodeUp 문제풀이

코드업 2039:시정표 작성하기(C)

티들 2023. 10. 20. 23:50

문제 설명

신입생 광곽이는 학교 시정표가 적응이 되지 않아 시정표를 작성하는 프로그램을 만드려 한다.

1교시 시작하는 시, 1교시 시작하는 분, 한 교시의 길이(분), 쉬는시간의 길이(분), 총 교시 수, n 교시 후 점심시간, 점심시간의 길이(분)가 주어질 때 시정표를 작성하시오. (단, n교시와 점심시간 사이, 그리고 점심시간과 n+1교시 사이에는 쉬는시간이 없다.)

 

입력

1교시 시작하는 시, 1교시 시작하는 분, 한 교시의 길이(분), 쉬는 시간의 길이(분), 총 교시 수, n 교시 후 점심시간, 점심시간의 길이(분) 가 입력된다. 최종 출력되는 시간은 24시를 넘지 않으며, 한 교시 및 쉬는 시간의 길이도 60분 미만이다. 점심 시간은 100분 이하이다.

광곽은 좋은 학교라서 수업이 일찍 끝나더라도 반드시 점심은 먹이고 집으로 보낸다.

 

출력

출력 예시를 참고해서 출력한다.

정시의 경우에는 9:00과 같이 00이 모두 출력되어야 한다.

 

입력 예시

8 40 50 10 9 4 60

 

출력 예시

8:40-9:30 1교시
9:40-10:30 2교시
10:40-11:30 3교시
11:40-12:30 4교시
12:30-13:30 점심시간
13:30-14:20 5교시
14:30-15:20 6교시
15:30-16:20 7교시
16:30-17:20 8교시
17:30-18:20 9교시

 

나의 코드

#include <stdio.h>

int main()
{
    int shour, smin, min, free, n, lunch, lmin;
    int count=1, i;	// 변수 선언
    // 입력
    scanf("%d %d %d %d %d %d %d",
        &shour, &smin, &min, &free, &n, &lunch, &lmin);

    if(lunch > n) lunch = n+1;	// 점심시간 계산
    else lunch++;

    for(i=0;i<n+1;i++)	// n+1만큼 반복(수업+점심)
    {
        while (smin >= 60) {	// 분 시단위로변경 
            smin -= 60;
            shour++;
        }
        // 현재 시간 출력
        printf("%d:%02d-", shour, smin);	
		
        // 다음 시간이 점심시간이 아니면
        if(i+1 != lunch) {
            smin += min;	// + 수업시간
            while (smin >= 60) {
                smin -= 60;
                shour++;
            }
            // 끝나는 시간과 교시 출력 
            printf("%d:%02d ", shour, smin);
            printf("%d교시\n", count++);
            if(i+2 != lunch)	// + 쉬는시간
                smin += free;
        }
        else {	// 다음 시간이 점심시간이면
            smin += lmin;	// + 점심시간
            while (smin >= 60) {
                smin -= 60;
                shour++;
            }
            // 끝나는시간과 점심시간 출력 
            printf("%d:%02d ", shour, smin);
            printf("점심시간\n");
        }
    }
    return 0;
}

 

문제 바로가기:https://codeup.kr/problem.php?id=2039&rid=0