조세푸스 문제(JOSEPHUS) 정답 코드
뿌리튼튼 CS/Algorithm2015. 1. 26. 16:36
문제를 보시려면 여기를 클릭
이하는 코드입니다.
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 89 90 91 92 93 94 95 96 97 98 99 100 101 | #include <stdio.h> #pragma warning(disable:4996) typedef struct Person { int id; struct Person *next; } Person; typedef struct { Person *last; Person *beforeTarget; int size; } List; List *list; int N, K; void pushBack(int id) { Person *newPerson = new Person; newPerson->id = id; if (list->size == 0) { newPerson->next = NULL; } else if (list->size == 1) { newPerson->next = list->last; list->last->next = newPerson; } else { // new person -> first Person *first = list->last->next; newPerson->next = first; // old last -> new person list->last->next = newPerson; } // new last = new person list->last = newPerson; list->size++; } void killTarget() { if (list->size <= 2) { return; } Person *target = list->beforeTarget->next; // before target -> target's next list->beforeTarget->next = target->next; // set list's beforeTarget Person *temp = list->beforeTarget; for (int i = 0; i < K - 1; i++) { temp = temp->next; } list->beforeTarget = temp; // remove target delete(target); list->size--; // recursive call killTarget(); } int main() { int C; scanf("%d", &C); for (int i = 0; i < C; i++) { scanf("%d %d", &N, &K); list = new List; list->size = 0; for (int j = 0; j < N; j++) { pushBack(j + 1); } list->beforeTarget = list->last; killTarget(); int id1 = list->beforeTarget->id; int id2 = list->beforeTarget->next->id; if (id1 < id2) { printf("%d %d\n", id1, id2); } else { printf("%d %d\n", id2, id1); } delete(list); } return 0; } | cs |
'뿌리튼튼 CS > Algorithm' 카테고리의 다른 글
Hello World!(HELLOWORLD) 정답 코드 (0) | 2015.01.27 |
---|---|
외발뛰기(JUMPGAME) 정답 코드 (0) | 2015.01.27 |
Longest Increasing Sequence(LIS) 정답 코드 (0) | 2015.01.20 |
타일링(TILING2) 정답 코드 (0) | 2015.01.17 |
삼각형 위의 최대 경로(TRIANGLEPATH) 정답 코드 (0) | 2015.01.17 |