사용자 도구

사이트 도구


jungol:problem_1003

정올 알고리즘 사이트에서 풀었던 문제를 기록용으로 정리함

문제 번호: 1003

문제 URL: http://www.jungol.co.kr/problem.php?ctc=040100&id=1003

내가 푼 코드

#include <stdio.h>
 
#define NODE_SIZE 101
 
struct MyQueue {
    int data_[NODE_SIZE];
    int front_;
    int rear_;
    int size_;
};
 
void init_queue(struct MyQueue* p_queue) {
 
    int i = 0;
    for (i = 0; i < NODE_SIZE; i++) {
        p_queue->data_[i] = 0;
    }
 
    p_queue->front_ = 0;
    p_queue->rear_ = 0;
 
}
 
void push_data(struct MyQueue* p_queue, int data, int k) {
 
    if (p_queue->size_ == NODE_SIZE) {
        printf("queue is full\n");
        return;
    } else {
 
        int iter_i = 0;
        int index_rear = p_queue->rear_;
 
        int* data_arr = p_queue->data_;
 
        for (iter_i = index_rear; iter_i > k; iter_i--) {
           data_arr[iter_i] = data_arr[iter_i - 1]; 
        }
 
        data_arr[k] = data;
 
        p_queue->rear_ = p_queue->rear_ + 1;
        p_queue->size_ = p_queue->size_ + 1;
    }
}
 
int pop_data(struct MyQueue* p_queue) {
    int return_value = -1;
 
    if (p_queue->size_ > 0) {
 
        return_value = p_queue->data_[p_queue->front_];
        p_queue->front_ = p_queue->front_ + 1;
        p_queue->size_ = p_queue->size_ - 1;
 
    } else {
        printf("queue is empty!\n");
    }
 
    return return_value;
}
 
void do_test() {
 
    struct MyQueue test_queue;
    int i = 0;
    init_queue(&test_queue);
 
    for (i = 0; i < 100; i++) {
        push_data(&test_queue, i, 0);
    }
 
    for (i = 0; i < 100; i++) {
        printf("poped_data index of [%d] = %d \n", i, pop_data(&test_queue));
    }
}
 
int compute_index(int max, int data) {
 
    int result = data - max;
    if (result < 0) {
        return (result * -1) - 1;
    }
    return result - 1;
}
 
int main(int argc, char* argv[]) {
 
    struct MyQueue my_queue;
    int n = 0;
    int i = 0;
    int data = 0;
 
    init_queue(&my_queue);
 
    scanf("%d", &n);
 
    for( i = 0; i < n; i++) {
        scanf("%d", &data);
 
        //printf("index: %d\n", compute_index(i + 1, data));
        push_data(&my_queue, i+1, compute_index(i + 1, data));
    }
 
    for (i = 0; i < n; i++) {
        printf("%d ", pop_data(&my_queue));
    }
    printf("\n");
 
    //do_test();
/*
    push_data(&my_queue, 1, 0);
    push_data(&my_queue, 2, 0);
 
    printf("data: %d\n", pop_data(&my_queue));
    printf("data: %d\n", pop_data(&my_queue));
    */
//    printf("argc: %d, argv: %s\n", argc, argv[0]);
    return 0;
}
jungol/problem_1003.txt · 마지막으로 수정됨: 2015/07/18 18:26 저자 lindol