자료구조와 알고리듬 With Java/[프로그래머스] Algorithm

Part 09 Tree

계란💕 2022. 3. 28. 16:09

  - tree는 규칙이 없던 그래프와 다르게 규칙이 있다.

 

1. Bynary tree

  - Bynary tree: child는 두 개만

  - 왼쪽부터 빠짐없이 채우면 => Complete Binary Tree

  - 빈 칸 없이 다 채우면 => Perfect Binary Tree

 

 

2. Tree읽는 방법

  1) DFS

  - In Order Travel: left -> root -> right

  - Pre Order Travle: root -> left -> right

  - Post Order Travel: left -> right -> root

 

  2) BFS

  - Level Order Travel

 

 

3. Heap

  - root에는 항상 최솟값이 있어야한다. => "Min heap'

  - root에는 항상 최댓값이 있어야한다. => "Max heap' 

  - 자바에서 "PriorityQueue"의 형태로 제공

    -> 작은 값부터 poll()  => Min heap

    -> 큰 값부터 poll() => reverseOrder()

  - Binary SearchTree를 이용하는 것은 대소관계를 사용한다는 것을 의미

 

  

  Note) 

  - 값이 set에 존재하는 지 확인할 때 대소관계를 확인한다.

    -> comparable이 필요하다. 

    -> comparable이 있어야 TreeSet이 동작한다.

java
열기

 

 

  Ex) 더 맵게

  - 스코빌 지수를 나타내는 배열과 정수k가 주어진다. 이 때 모든음식의 스코빌 지수를 K이상으로 만들기위해

  - 섞어야하는 최소횟수를 리턴한다.

  - list.remove(0): 0번째 값 꺼내기

  - answer : 섞은 횟수

  - sort를 매번 하지 않도록 min heap을 이용한다.

  - min heap이므로 sort할 필요없다.

java
열기

 

 

  Ex) 가장 먼 노드

  - n개의 노드가 있는 그래프가 있다. 1번 노드에서 가장 멀리 떨어진 노드의 개수를 구한다.

  - 1번 노드로부터 가장 멀리 떨어진 노드의 개수를 반환한다.

java
열기

 

 

  Ex) 순위 - 정확히 순서를 매길 수 있는 선수의 수를 반환

https://school.programmers.co.kr/learn/courses/30/lessons/49191

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

  - n명의 권투 선수, 대회 참여, 

  ex)  n = 5,  [ [4, 3] ,[ 4, 2 ], [3, 2], [1, 2], [2, 5] ] return = 2;

    -> 4번 선수가 3, 2 번 선수를 이김, 3번이 2번을 이김, 2번이 5번을 이김, 1번이 2번을 이김

  - 경기횟수가 가장 많은 선수들의 순위를 알아낼 수 있다.

  - 노드를 만들고 시작

  - 선수 번호에 따라서 arrayList로 만든다.

java
열기

 

출처: https://programmers.co.kr/learn/courses/13577

'자료구조와 알고리듬 With Java > [프로그래머스] Algorithm' 카테고리의 다른 글

Part 08 Graph (그래프)  (0) 2022.03.24
Part 07 정렬 (Sort)  (0) 2022.03.24
Part 06 선형탐색 (Linear Search)  (0) 2022.03.23
Part 05 Stack과 Queue  (0) 2022.03.23
Part 04 집합 (Set)  (0) 2022.03.22