목록트리 (16)
어흥
문제 링크: https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/?envType=study-plan-v2&envId=top-100-liked LeetCode - The World's Leading Online Programming Learning Platform Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 1. 주의할 점 - 재귀문으로 접근하며, re..
문제 링크: https://www.acmicpc.net/problem/16964 16964번: DFS 스페셜 저지 첫째 줄에 정점의 수 N(2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에는 트리의 간선 정보가 주어진다. 마지막 줄에는 DFS 방문 순서가 주어진다. DFS 방문 순서는 항상 N개의 정수로 이루 www.acmicpc.net 1. 주의할 점 - 자식이 많은 부모의 경우, Leaf를 찍고 돌아왔을 때 다음 Node가 자신의 자식인지 어떻게 판별할 것인가? - 브루트포스는 절대로 하지 않는다 (하면 안되는거 알잖아요..) - TLE를 어떤 방식으로 해결할 것인가? 2. 구현 - 제목 그대로 DFS로 접근한다 - 모든 간선에 대한 정보는 Li[] 리스트 배열에 담는다 - Ar..
문제 링크: https://www.acmicpc.net/problem/15900 15900번: 나무 탈출 평소에 사이가 좋지 않던 성원이와 형석이가 드디어 제대로 한 판 붙으려고 한다. 성원이와 형석이 둘과 모두 똑같이 친한 인섭이가 대결 종목을 정해 가져왔다. 바로 '나무 탈출' 이라는 보드게 www.acmicpc.net 1. 주의할 점 - 트리 탐색시 방문 검사를 하지 않으면 TLE가 날 수 있다 2. 구현 - 간선에 대한 정보를 Li[] 배열에 담는다 - Root부터 idx Node까지의 거리를 Dist[idx]에 저장한다 - 트리 탐색을 하며, Leaf Node인 경우, Sum에 Dist[] 값을 추가한다 - 성원이가 게임을 이기기 위해서는 홀수번째 움직임에 게임이 끝나야 한다. 즉, Leaf N..
문제 링크: www.acmicpc.net/problem/3584 3584번: 가장 가까운 공통 조상 루트가 있는 트리(rooted tree)가 주어지고, 그 트리 상의 두 정점이 주어질 때 그들의 가장 가까운 공통 조상(Nearest Common Anscestor)은 다음과 같이 정의됩니다. 두 노드의 가장 가까운 공통 조상은, 두 www.acmicpc.net 1. 주의할 점 - LCA 알고리즘에 대해 알고 있어야 한다 - O(NlgN)에 수행되는 알고리즘을 이해하도록 한다 2. 구현 - 모든 변에 대해 입력받은 후, havePar[] 배열을 통해 트리의 Root를 찾는다 - DFS() 함수를 통해 각 Node의 트리에서 높이를 구한다 - Make_tree() 함수를 통해 N번째 Node의 2^i번째 높..
문제 링크: www.acmicpc.net/problem/14267 14267번: 회사 문화 1 영선회사에는 매우 좋은 문화가 있는데, 바로 상사가 직속 부하를 칭찬하면 그 부하가 부하의 직속 부하를 연쇄적으로 칭찬하는 내리 칭찬이 있다. 즉, 상사가 한 직속 부하를 칭찬하면 그 부하 www.acmicpc.net 1. 주의할 점 - 한명의 상사에겐 여러명의 직속부하가 있을 수 있다 - 칭찬을 모두 저장했다가 트리의 순서에 따라 부여한다 2. 구현 - 모든 직원들에 대해 상사->직속 부하에 대한 정보를 V[]벡터에 저장한다 - 입력받은 모든 칭찬에 대해 해당 직원의 index번호에 해당하는 Compliment[]에 더한다(한 직원이 여러번 받았을 수도 있으므로 할당이 아닌 더하기) - 사장인 1번부터 시작하..
문제 링크: www.hackerrank.com/challenges/tree-huffman-decoding/problem?h_r=internal-search Tree: Huffman Decoding | HackerRank Given a Huffman tree and an encoded binary string, you have to print the original string. www.hackerrank.com 1. 주의할 점 - 파라미터로 받았던 Tree의 Root를 저장하는 포인터가 있어야 한다 - Leaf에 도달했을 때 처리를 명확히 한다 2. 구현 - Head를 통해 Root 포인터를 기억해놓는다 - 모든 문자를 방문할때까지만 While문을 돌리도록 idx와 len을 통해 조건문을 설정한다 - 파..
문제링크: www.hackerrank.com/challenges/tree-level-order-traversal/problem Tree: Level Order Traversal | HackerRank Level order traversal of a binary tree. www.hackerrank.com 1. 주의할 점 - Queue를 이용하여 구조체를 담도록 한다. 2. 구현 - Queue q를 이용하여 Node형태의 원소를 담을 수 있는 큐를 생성한다 - Root가 nullptr이 아니라면 큐에 넣고, While문을 큐에 원소가 없을때까지 수행한다 - 큐에서 원소를 1개 뽑은 후, 해당 값을 출력하고 해당 Node의 왼쪽, 오른쪽 자식이 있으면 순서대로 큐에 넣는다 queue q; void level..
문제 링크: www.hackerrank.com/challenges/tree-height-of-a-binary-tree/problem?h_r=internal-search Tree: Height of a Binary Tree | HackerRank Given a binary tree, print its height. www.hackerrank.com 1. 주의할 점 - 바이너리 트리의 형태에 대해 알고 있어야 한다 2. 구현 - 바이너리 트리는 최대 자식이 2개가 있는 트리로, 한쪽으로 치우쳐져 있을 수 있다 - 현재 Node의 높이를 나타내는 cur를 0으로 설정하고, 왼쪽이나 오른쪽에 자식이 있다면 cur과 자식의 높이+1을 비교하여 큰 값을 cur에 저장한 이후, cur를 리턴한다 int height(..