코딩테스트 준비

연습문제

MAKGA 2023. 1. 8. 22:33
320x100

숫자가 순서대로 n 크기의 나열된 리스트가 있다.

이를 m만큼 건너 뛰며  제외시킨다고 할 때, 그 제외된 목록들을 순서대로 출력해보자.

 

struct Node
{
    int n;
    Node* before;
    Node* next;
};

int main()
{
    int n = 0;
    int m = 0;
    std::cin >> n >> m;

    std::vector<Node*> v(n);

    for (int i = 0; i < n; ++i)
    {
        v[i] = new Node;
        v[i]->n = i + 1;
    }

    for (int i = 0; i < n; ++i)
    {
        v[i]->before = v[i - 1 >= 0 ? i - 1 : n - 1];
        v[i]->next = v[i +1 < n ? i + 1 : 0];
    }

    int count = 0;
    int remain = n;

    Node* cur = v[0];

    while (remain > 1)
    {
        if (++count == m)
        {
            cout << cur->n << ", ";

            cur->before->next = cur->next;
            cur->next->before = cur->before;

            Node* del = cur;
            cur = cur->before;
            delete del;
            --remain;

            count = 0;
        }

        cur = cur->next;
    }

	return 0;
}

320x100

'코딩테스트 준비' 카테고리의 다른 글

DP  (0) 2022.04.24