본문 바로가기

분류 전체보기93

Codeforces Round #683 (Div. 2, by Meet IT) AB import sys input = sys.stdin.readline for _ in range(int(input())): n = int(input()) print(n) for i in range(n): print(i+1, end=" ") print() A - Add Candies 한 바구니를 선택한다는 조건을 무시하면, 사탕을 n번 넣었을 때 모든 바구니에 똑같이 (n * (n+1))/2 개의 사탕을 넣게 된다. 이때 각 바구니에 들어있는 사탕 수는 처음과 같이 등차 +1의 관계를 가진다. 따라서 1번 바구니부터 1, 2, 3... 순서로 빼주면 모든 바구니가 같은 수의 사탕을 가지게 된다. 결론은 1번부터 n번까지 순서대로 한 번 씩 선택하면 된다. #include using namespace std;.. 2020. 11. 16.
Queue 개요 한 쪽 끝에선 삽입, 다른 쪽 끝에선 삭제가 일어나는 자료구조 Queue의 성질 First-in First-out (FIFO), 즉 선입선출 방식으로 객체를 담는다. rear에 삽입하고 front에서 삭제한다. Queue 대표적인 operation은 enqueue, dequeue가 있고, 추가로 front, size, empty 등을 지원할 수 있다. Array 또는 Linked List로 구현할 수 있다. Array의 크기를 변경하기 곤란하다는 점을 고려하여 환형으로 구성하면 시간복잡도를 낮출 수 있다. 배열에서 큐의 시작점, 끝점, 크기를 기억하는 변수를 만들어서 구현할 수 있다. 아래는 Array기반 큐의 구현 예시이다. (Linked list 기반 큐는 SLL과 똑같다.) struct Arr.. 2020. 10. 26.
Stack 개요 한 쪽 끝에서만 삽입 삭제가 일어나는 자료구조 Stack의 성질 Last-in First-out (LIFO), 즉 후입선출 방식으로 객체를 담는다. 삽입과 삭제에 쓸 위치를 알고 있어야 한다. Stack 대표적인 operation은 push, pop이 있고, 추가로 top, size, empty 등을 지원할 수 있다. Array 또는 Linked List로 구현할 수 있다. 아래는 각각에 대한 예시이다. struct ArrayStack { int* stack; int maxSize, sz; ArrayStack(int ms) { maxSize = ms; sz = 0; stack = new int[maxSize]; } void push(int data); int pop(); } struct Node {.. 2020. 10. 26.
Doubly Linked List와 Iterator 개요 노드의 sequence를 담은 자료구조. 더 일반화 된 List ADT를 구현할 수 있다. DLL의 성질 각 노드는 이전 노드와 다음 노드에 대해 양방향으로 연결한다. 두 더미 노드 trailer, header를 활용하면 구현에 용이하다. Node SLL에 추가로 이전 노드의 주소를 가진다. 아래는 앞으로 사용할 노드의 예시이다. struct Node { int data; Node* next; Node* prev; } Doubly Linked List SLL보다 일반적인 함수 구현에 유리하다. 예를 들면, 다음과 같은 ADT를 구성할 수 있다. struct DLL { Node* head; Node* tail; Iter it; void insert(Node* target, int e); void er.. 2020. 10. 26.
Singly Linked List 개요 노드의 sequence를 담은 자료구조. Array의 단점인 유연하지 못한 크기 조절을 해소한다. SLL의 성질 각 노드는 다음 노드를 연결하여 단방향 순차 접근이 가능하다. Node 각 노드는 값 (element)과 다음 노드의 주소를 가진다. 아래는 int형 element (data)와 다음 노드의 주소 (next)를 가지는 노드의 예시이다. struct Node { int data; Node* next; } Singly Linked List SLL은 ADT로서 데이터 (노드), Operation (함수)를 가진다. 아래는 노드의 시작 주소 (head)와 간단한 함수들을 가지는 SLL의 예시이다. struct SLL { Node* head; int at(int); bool empty(); voi.. 2020. 10. 26.
Array 개요 동일 자료형 원소들의 sequence. TYPENAME name[SIZE] 의 꼴로 쓴다. Array의 성질 index를 이용해 각 원소를 임의 참조할 수 있다. [0 : N) 크기를 미리 정해야 한다. Insertion index i에 원소 e를 삽입할 때, index가 i 이상인 모든 원소를 shift 한다. $O(n)$ Deletion index i의 원소를 삭제할 때, index가 i 이상인 모든 원소를 shift 한다. $O(n)$ Array의 원소들은 연속하여야 하기 때문이다. Implementation 아래는 이론에서 배운 내용을 구현한 코드이다. #include using namespace std; /* # Insert(i, e)O(n) # Remove(i)O(n) # at(i)O(1.. 2020. 10. 25.