내 소식

✨컴공주✨ [1052682] · MS 2021 (수정됨) · 쪽지

2022-07-15 03:10:01
조회수 492

컴공 일기128

게시글 주소: https://dev.orbi.kr/00057573069



다음 문제를 코딩한 겁니다.... 분명 실행결과는 3 6 2 7 1 5 4인데.... 왜 틀린 거냐고 컴파일러 양반 ㅜㅜㅜㅜㅜㅜㅜㅜ

예외가 조금 있나 봐요... 내 환형 링크드 리스트는 완벽하다고 생각했는데 :< 역시 이 문제는 LinkedList를 기반으로 하기 보다는 덱이나 큐로 접근하는 게 더 효율적인 듯 싶습니다. 내일은 큐나 덱으로 접근해보아야 겠어요...



#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>


typedef struct tagNode

{

    int Data;

    struct tagNode* PrevNode;

    struct tagNode* NextNode;

}Node;


Node* CDLL_CreateNode(int NewData)

{

    Node* NewNode = (Node*)malloc(sizeof(Node));


    NewNode->Data = NewData;

    NewNode->PrevNode = NULL;

    NewNode->NextNode = NULL;


    return NewNode;

}



void CDLL_RemoveNode(Node** Head, Node* Remove)

{

    if ((*Head) == Remove)

    {

        (*Head)->PrevNode->NextNode = Remove->NextNode;

        (*Head)->NextNode->PrevNode = Remove->PrevNode;


        *Head = Remove->NextNode;


        Remove->PrevNode = NULL;

        Remove->NextNode = NULL;

    }

    else

    {

        Node* Temp = Remove;


        Remove->PrevNode->NextNode = Temp->NextNode;

        Remove->NextNode->PrevNode = Temp->PrevNode;


        Remove->PrevNode = NULL;

        Remove->NextNode = NULL;

    }

}

void CDLL_AppendNode(Node** Head, Node* NewNode)

{

    if ((*Head) == NULL)

    {

        *Head = NewNode;

        (*Head)->PrevNode = *Head;

        (*Head)->NextNode = *Head;

    }


    else

    {

        Node* Tail = (*Head)->PrevNode;


        Tail->NextNode->PrevNode = NewNode;

        Tail->NextNode = NewNode;


        NewNode->NextNode = (*Head);

        NewNode->PrevNode = Tail;

    }

}




int main(void)

{

    int N;

    int K;

    int M;

    int i;

    int cnt = 0;


    scanf("%d %d %d", &N, &K, &M);


    Node* List = NULL;

    Node* NewNode = NULL;

    Node* Current = NULL;


    for (i = 1; i < N + 1; i++) {

        NewNode = CDLL_CreateNode(i);

        CDLL_AppendNode(&List, NewNode);

    }


    Current = List;

    while (N >= 1)

    {

        if (cnt == M)

        {

            for( i=1; i <K+1; i++)

            {

                Current = Current->PrevNode;

            }


            printf("%d\n", Current->Data);



            Current = Current->PrevNode;

            CDLL_RemoveNode(&List, Current->NextNode);

            N--;

            cnt++;

            cnt = 0;

        }


        else 

        {

            for (i = 1; i < K; i++)

            {

                Current = Current->NextNode;

            }


            printf("%d\n", Current->Data);

            


            Current = Current->NextNode;

            CDLL_RemoveNode(&List, Current->PrevNode);

            N--;

            cnt++;


        }

        

        

     }   

}


[실행결과]

7 3 4

3

6

2

7

1

5

4


rare-백예린입니다

0 XDK (+0)

  1. 유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.

✨컴공주✨ [1052682]

쪽지 보내기