1. 소스코드

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIMULATION_COUNT 1000
#define WORKING_TIME 3600 // 1 hour in seconds
#define INTERVAL 15       // 15 seconds interval for new tasks

typedef enum {
    A = 12,
    B = 15,
    C = 24
} Task;

Task generate_random_task() {
    int rand_value = rand() % 3;
    if (rand_value == 0) return A;
    if (rand_value == 1) return B;
    return C;
}

int simulate_cpu(int queue_length) {
    int time = 0;
    int queue[queue_length];
    int queue_start = 0, queue_end = 0, queue_size = 0;
    int task_time_left = 0;

    while (time < WORKING_TIME) {
        // 15초마다 새 Task 생성
        if (time % INTERVAL == 0) {
            Task new_task = generate_random_task();
            // 큐 길이보다 큐 사이즈가 작으면 큐에 Task 넣기
            if (queue_size < queue_length) {
                queue[queue_end] = new_task;
                queue_end = (queue_end + 1) % queue_length;
                queue_size++;
            } else {
                return 0; // 작업 드롭, 실패
            }
        }

        // 현재 작업이 없으면 큐에서 새 작업 가져오기
        if (task_time_left == 0 && queue_size > 0) {
            task_time_left = queue[queue_start];
            queue_start = (queue_start + 1) % queue_length;
            queue_size--;
        }

        // 작업이 진행 중이면 남은 시간 감소
        if (task_time_left > 0) {
            task_time_left--;
        }

        // 시간이 흐름
        time++;
    }

    // 시뮬레이션 종료 시 대기 큐와 남은 작업 확인
    return (queue_size == 0 && task_time_left == 0); // 작업이 모두 처리되었으면 성공
}

int main() {
    srand(time(NULL));
    int success_count;
    int queue_length = 1;

    while (1) {
        success_count = 0;
        for (int i = 0; i < SIMULATION_COUNT; i++) {
            if (simulate_cpu(queue_length)) {
                success_count++;
            }
        }

        float success_rate = (float)success_count / SIMULATION_COUNT * 100;
        printf("Queue Length: %d, Success Rate: %.2f%%\\n", queue_length, success_rate);

        if (success_rate >= 90.0) {
            printf("Minimum queue length with at least 90%% success rate: %d\\n", queue_length);
            break;
        }

        queue_length++;
    }

    return 0;
}

2. 실행결과

Type A

Untitled

Type B

스크린샷 2024-06-06 오전 3.58.39.png

3. 고찰

Type B에 대해서 문제를 잘 못 알아들은 것 같습니다 또한, 어떤 부분 때문에 계속 문제가 발생하는지 지점을 찾지를 못하겠어서 B는 해결하지 못한채 제출하게 되었습니다. 답을 알 수 있다면 좋을 것 같습니다