본문 바로가기

자료구조3

BOJ 3190 - 뱀 https://www.acmicpc.net/problem/3190 구현이 문제에서 크게 구현할 부분은 사과를 먹었을 때 꼬리를 늘리는 작업, 뱀 몸통에 부딪혔을 때 게임이 종료되게 하는 기능 이다.뱀의 위치를 효율적으로 나타내기 위한 자료구조를 생각해내는 것이 핵심이다. 뱀이 한 번 움직이면 꼬리와 머리가 한 칸씩 움직이기 때문에 앞과 뒤를 다룰 수 있는 deque를 이용하면 된다. 문제에서 헤맸던 부분이 방향을 돌리는 시점이다.예를 들어 10초에 왼쪽으로 움직인다는 뜻은 이전 방향으로 10까지 움직인 후에 방향을 바꾼다는 뜻이다! 구현 문제 중 쉬운 편에 속한다. 코드#include #include #include using namespace std;#define UP_DIR 0#define RIGHT.. 2024. 6. 20.
[리스트ADT] 원형 리스트 문제 촛불이 N개 꽃혀있는 케이크에서 k번개씩 건너 뛰면서 촛불을 끌 때, 마지막으로 남아 있는 촛불을 어떻게 될까? [ 배열로 구현 ] int runSimulation(int* arr,int N, int n, int k) { int cur = 0; while (n > 1) { int cnt=1; while (cnt < k) { cur=(cur+1)%N; if (arr[cur] != 0) { cnt++; } } arr[cur] = 0; n--; while (arr[cur] == 0) { cur = (cur + 1) % N; } } return cur; } [ 원형 리스트 ] int runSimulation(Node* list,int N, int n, int k) { Node* cur = list; while .. 2023. 4. 1.
[연결리스트 ADT] 추가 기능 구현 2가지 방법 1. Head & Tail 사용하기 Head와 Tail을 사용하면 경우를 생각하지 않아도 된다. 왜냐하면, Tail의 존재로 인해 NULLPOINT가 생길 수 없다. 따라서, Head부터 순회를 하면서 IDX가 0이 되면, 그자리의 노드를 밀어내고 그자리에 새로운 노드를 넣으면 된다. 더보기 void Add(List* list,int r, char c) { Node* NewNode = (Node*)malloc(sizeof(Node)); NewNode->data = c; NewNode->next = NULL; NewNode->prev = NULL; Node* cur = list->Head; if (cur->next == list->Tail) { cur->next = NewNode; list->Tail->p.. 2023. 3. 26.