728x90
문제 :: 원형으로 N명 만큼 둘러 앉아서 K번째 사람을 한명씩 처형시킬 때 처형되는 순서를 출력 (컴공 과제)
접근방식
원형 연결 리스트(Circular Linked List) (순환 리스트)를 구성하여 K칸씩 움직이며 해당칸을 삭제해주면 된다.
입력 : 포로수 처형위치 (ex)
N K
5 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//.cpp
typedef struct tag_list
{
int iData; // integer 형을 저장하는 변수
struct tag_list* p_Link;
}List;
void push(List** p_Head, List** p_Cur, int iData);
int pop(List** p_Cur, List* p_Prev);
int iArray[1000];
void main() //.cpp
{
List* p_Head = NULL; // LIST의 시작점
List* p_Cur= NULL; // 리스트의 현재 사용할 위치를 가리킬 커서역활
// Push 때는 추가된 곳을 가리키고, POP 때는 삭제 된 노드의 이전을 가리킨다.
List* p_CurPrev; // pop연산을 위하여 현재 가리키는 위치의 전 노드를 가리킴
int N, K; // N 포로 수 , K 처형 위치 값
int iCount = 0; // 남은 인원수 카운트용
scanf("%d %d", &N, &K);
for(int i = 0; i < N; i++)
{
push(&p_Head, &p_Cur, i+1);
}
p_Cur = p_Head;
while(iCount != N-1)
{
for(int i = 0; i < K-1; i++)
{
p_CurPrev = p_Cur;
p_Cur = p_Cur->p_Link;
}
iArray[iCount] = pop(&p_Cur, p_CurPrev);
iCount++;
}
printf("%d\n",p_Cur->iData);
for(int i = 0; i < N-1; i++)
{
printf("%d ",iArray[i]);
}
}
void push(List** p_Head, List** p_Cur, int iData)
{
List* p_NewNode = new List;
p_NewNode->iData = iData;
if(*p_Head == NULL)
{
*p_Head = p_NewNode;
p_NewNode->p_Link = *p_Head;
}
else
{
p_NewNode->p_Link = (*p_Cur)->p_Link;
(*p_Cur)->p_Link = p_NewNode;
}
*p_Cur = p_NewNode;
}
int pop(List** p_Cur, List* p_CurPrev)
{
int remove_data;
List* p_removeNode;
p_removeNode = *p_Cur;
remove_data = p_removeNode->iData;
p_CurPrev->p_Link = p_removeNode->p_Link;
*p_Cur = p_CurPrev->p_Link;
delete(p_removeNode);
return remove_data;
}
|
cs |
혹여 과제기간은 지났지만 궁금할수도 있는 후배님들을 위해 올려봅니다.
728x90
728x90
'Dev > 알고리즘-자료구조' 카테고리의 다른 글
[개탱][C][C++][2차원배열][operator overloading][행렬] (0) | 2018.01.02 |
---|---|
[개탱][C][행렬의 합, 행렬의 곱 . . ][Dynamic allocation] (0) | 2017.12.21 |
[개탱][C][컴공과제][희소행렬의 합구하기][파일 입출력][구조체] (0) | 2017.12.21 |
[개탱][C언어][하노이탑][간단한 알고리즘][재귀][Stack][스택][그래픽화][그래픽][도형] (0) | 2017.12.21 |
[개탱][C언어][하노이탑][간단한 알고리즘][재귀호출][재귀함수][Stack][스택] (0) | 2017.12.21 |