본문 바로가기

C++

(44)
[코딩인터뷰 완전정복] 3.2 스택 Min Q : 기본적인 push와 pop 기능이 구현된 스택에서 최솟값을 반환하는 min함수를 추가하려고 한다. 어떻게 설계할 수 있겠는가? push, pop, min 연산은 모두 O(1) 시간에 동작해야 한다. #include class stack { private: int *start; int nOfE; int size; int *minStack; int minNofE; int minStackSize; public: stack() { start = new int[10]; nOfE = 0; size = 10; minStack = new int[10]; minNofE = 0; minStackSize = 10; } stack(int N) { start = new int[N]; nOfE = 0; size = N; ..
[코딩인터뷰 완전정복] 2.8 루프 발견 Q : 순환 연결리스트(circular linked list)가 주어졌을 때, 순환되는 부분의 첫째 노드를 반환하는 알고리즘을 작성하라. 순환 연결리스트란 노드의 next 포인터가 앞선 노드들 가운데 어느 하나를 가리키도록 설정되어 있는, 엄밀히 말해서 변질된 방식의 연결리스트를 의미한다. ...더보기 // LinkedList.h #include template struct node { T data; node *next; }; template class linked_list{ private: node *head, *tail; public: linked_list() { head = NULL; tail = NULL; } node* add_node(T n) { node *temp = new node; temp..
[코딩인터뷰 완전정복] 2.6 회문 Q : 주어진 연결리스트가 회문(palindrome)인지 검사하는 함수를 작성하라. ...더보기 // LinkedList.h #include template struct node { T data; node *next; }; template class linked_list{ private: node *head, *tail; public: linked_list() { head = NULL; tail = NULL; } node* add_node(T n) { node *temp = new node; temp->data = n; temp->next = NULL; if (head == NULL) { head = temp; tail = temp; } else { tail->next = temp; tail = tail..
[코딩인터뷰 완전정복] 2.5 리스트의 합 Q : 연결리스트로 숫자를 표현할 때 각 노드가 자릿수 하나를 가리키는 방식으로 표현할 수 있다. 각 숫자는 역순으로 배열되어 있는데, 첫 번째 자릿수가 리스트의 맨 앞에 위치하도록 배열된다는 뜻이다. 이와 같은 방식으로 표현된 숫자 두개가 있을 때, 이 두 수를 더하여 그 합을 연결리스트로 반환하는 함수를 작성하라. ...더보기 // LinkedList.h #include struct node { int data; node *next; }; class linked_list { private: node *head, *tail; public: linked_list() { head = NULL; tail = NULL; } node* add_node(int n) { node *temp = new node; t..
[코딩인터뷰 완전정복] 2.4 분할 Q : 값 x가 주어졌을 때 x보다 작은 노드들을 x보다 크거나 같은 노드들보다 앞에 오도록 하는 코드를 작성하라. 만약 x가 리스트에 있다면 x는 '오른쪽 그룹' 어딘가에만 존재하면 된다. 왼쪽과 오른쪽 그룹 사이에 있을 필요는 없다. ...더보기 // LinkedList.h #include struct node { int data; node *next; }; class linked_list { private: node *head, *tail; public: linked_list() { head = NULL; tail = NULL; } node* add_node(int n) { node *temp = new node; temp->data = n; temp->next = NULL; if (head == ..
[코딩인터뷰 완전정복] 2.3 중간 노드 삭제 Q : 단방향 연결리스트가 주어졌을 때 중간에 있는 노드하나를 삭제하는 알고리즘을 작성하라. 단 삭제할 노드에만 접근 할 수 있다. ...더보기 // LinkedList.h #include struct node { int data; node *next; }; class linked_list { private: node *head, *tail; public: linked_list() { head = NULL; tail = NULL; } node* add_node(int n) { node *temp = new node; temp->data = n; temp->next = NULL; if (head == NULL) { head = temp; tail = temp; } else { tail->next = tem..
[코딩인터뷰 완전정복] 2.2 뒤에서 K번째 원소 구하기 Q : 단방향 연결 리스트가 주어졌을 때 뒤에서 k번째 원소를 찾는 알고리즘을 구현하라. ...더보기 // linked_list.h #include struct node { int data; node *next; }; class linked_list { private: node *head, *tail; public: linked_list() { head = NULL; tail = NULL; } void add_node(int n) { node *temp = new node; temp->data = n; temp->next = NULL; if (head == NULL) { head = temp; tail = temp; } else { tail->next = temp; tail = tail->next; } ..
[코딩인터뷰 완전정복] 2.1 중복 없애기 Q : 정렬되어 있지 않은 연결리스트가 주어졌을 때 이 리스트에서 중복되는 원소를 제거하는 코드를 작성하라. + 임시 버퍼를 사용할 수 없다면 어떻게 풀 수 있을까? 우선 연결리스트를 준비한다. ...더보기 #include struct node { int data; node *next; }; class linked_list { private : node *head, *tail; public: linked_list() { head = NULL; tail = NULL; } void add_node(int n) { node *temp = new node; temp->data = n; temp->next = NULL; if (head == NULL) { head = temp; tail = temp; } else..