본문 바로가기

LIST

(7)
[코딩인터뷰 완전정복] 4.7 순서 정하기 Q : 프로젝트의 리스트와 프로젝트들 간의 종속 관계(즉, 프로젝트 쌍이 리스트로 주어지면 각 프로젝트 쌍에서 두 번째 프로젝트가 첫 번째 프로젝트에 종속되어 있다는 뜻)가 주어졌을 때, 프로젝트를 수행해 나가는 순서를 찾으라. 유효한 순서가 존재하지 않으면 에러를 반환한다. 예시 입력 : 프로젝트: a, b, c, d, e, f 종속관계: (a,d),(f,b),(b,d),(f,a),(d,c) 출력 : f,e,a,b,d,c #include #include #include #include template std::list ordering(std::list proj, std::list relation) { int size = proj.size(); int *depNum = new int[size]; bool..
C++/STL List를 순회하는 방법 std::list std::list intList; 기존 방법 (iterator 사용) for(std::list::iterator itr = intList.begin(); itr != intList.end(); itr++){ printf("%d",**itr); } 향상된 for문을 이용한 탐색 for (int *ptr : intList){ printf("%d",*ptr); } for each문을 이용한 탐색 for each(int* i in intList){ printf("%d",*i); } iterator를 쓰지 않는 편이 깔끔하다!
[코딩인터뷰 완전정복] 4.3 깊이의 리스트 Q : 이진 트리가 주어졌을 때 같은 깊이에 있는 노드를 연결리스트로 연결해 주는 알고리즘을 설계하라. 즉, 트리의 깊이가 D라면 D개의 연결리스트를 만들어야 한다. ...더보기 template class TreeNode{ public: T data; TreeNode* parent; TreeNode* left; TreeNode* right; TreeNode(T data) { this->data = data; } }; template class ListNode { T data; ListNode* previous; ListNode* next; ListNode(T data) { this->data = data; } }; #include #include #include #include "Node.h" using..
[코딩인터뷰 완전정복] 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.7 교집합 Q : 단방향 연결리스트 두 개가 주어졌을 때 이 두 리스트의 교집합 노드를 찾은 뒤 반환하는 코드를 작성하라. 여기서 교집합이란 노드의 값이 아니라 노드의 주소가 완전히 같은 경우를 말한다. 즉, 첫 번째 리스트에 있는 k번째 노드와 두 번쨰 리스트에 있는 j번째 노드가 주소까지 완전히 같다면 이 노드는 교집합의 원소가 된다. A : HashSet을 사용한다. 첫 번째 리스트를 순회하며 각 노드의 주소값을 HashSet에 담는다. 두 번째 리스트를 순회하며 노드의 주소값이 HashSet에 있을 경우 해당 노드부터 End노드 까지의 부분 리스트가 두 리스트의 교집합이다.
[코딩인터뷰 완전정복] 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..
[C++ STL] List 1. List - Node기반 컨테이너이다. - 첫번째 원소와 마지막 원소를 알고 있는 Doubly linked list - 임의접근이 불가능하다. 순차접근만 가능. - 연산자("==", "!=", "", "=") 사용 가능. 2. Include #include 3. 선언 std::list name; std::list name(SizeType listSize); // initialized to default std::list name(SizeType listSize, T& initialize); std::list name(list otherList); namespace std를 사용함. 생성시 초기화 설정 가능. 기존의 list를 복사해서 생성가능. 4. function // list를 초기화하며 할당...