336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
비교정렬로서 이진트리구조를 이용한 정렬방법이다.
  1. 가장 위에 위치한 루트 값이 정렬조건에서 가장 우선순위가 높은 값이 위치한다.
  2. 항상 부모의 값은 자식의 값보다 정렬조건에서 우선순위가 높다.

이렇게 되면 

위와 같이 힙에 값이 들어있다고 하자. 그러면 1에 위치한 값은 정렬조건에서 우선순위가 가장 높은 값이 있어야 한다.
그리고 2의 값은 아래 위치한 노드들의 값(4)보다 우선순위가 높은 값이 위치해있어야 한다.
3의 값 또한 서브트리 값들(5)보다 우선순위가 높은 값이 위치해있어야 한다.

여기서 만들어야 하는 것은 2가지 경우이다. 
  1. 힙에 값을 넣었을 때
  2. 힙에서 값을 빼내었을 때

1번의 경우, 힙에 값을 넣게 되면 위 그림에서 6번 노드가 새로 추가 되었다. 가장 마지막에 값을 위치시키고, 바로 위의 부모와 비교를 하여 6번의 값이 우선순위가 높은 경우에 부모의 값과 바꿔주고, 과정을 반복한다. 아닌 경우 과정을 멈춘다. 

2번의 경우, 힙에서 값을 꺼낸다. 그러면 1번 노드(루트)를 꺼내게 된다. 그리고 루트와 마지막에 위치한 노드를 변경한다.

그리고 6번 노드의 자식인 2번과 3번노드를 비교하여 우선순위가 높은 노드와 변경해준다. 이때 2번과 3번을 비교하여 더 우선순위가 높은 값을 올려준다. 
만약 값이 더이상 없는 경우 과정을 멈춘다.

이렇게 정렬하고 싶은 데이터를 모두 넣고 차례대로 꺼내어 배열에 순서대로 넣어주게 되면 정렬을 할 수 있다.

최소힙구현 코드를 참고하면 된다.


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
벡터 내에 
  1. full
  2. empty
  3. size
  4. clear
  5. push_back
  6. operator []
6가지를 코드로 작성해보았다. 아래는 코드이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
template<class T>
struct my_vector {
    T* d;
    int sz;
    int cap;
    my_vector(int init_size = 32) {
        sz = 0;
        cap = init_size;
        d = new T[cap];
    }
    bool full() { return sz == cap; }
    bool empty() { return !sz; }
    int size() { return sz; }
    void clear() { sz = 0; }
    T operator [] (int i) { return d[i]; }
    void push_back(T input) {
        if (full()) {
            T* tmp = T[cap << 1];
            for (register int i = 0; i < sz; ++i) {
                tmp[i] = d[i];
            }
            delete[] d;
            d = tmp;
            cap <<= 1;
        }
        d[sz++= input;
    }
};
cs


'PSNote > C++STL' 카테고리의 다른 글

[C++STL]binary_search  (0) 2017.07.20
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

[문제설명]

cmd 입력으로 0이 아닌 입력이 들어오면 원소를 넣는다.

cmd 입력이 0 인 경우 힙의 가장 위에 있는 원소를 출력한다.
이때 힙에 가장 위에 위치는 원소는 절대값으로 가장 작고, 동일한 절대값이 있는 경우 가장 작은 값을 출력한다.
이때 힙이 비어있는 경우 0을 출력한다. 

[문제풀이]
힙을 구현하면 된다. 
이때 minheap을 구현하기 위해서 node라는 구조체를 선언하고 operator < 로 비교하게 하여 조건을 처리하여 풀이할 수 있다.

[C++ source code]



'PSNote > Problem Solving' 카테고리의 다른 글

[BOJ-10825]국영수  (0) 2019.01.20
[BOJ-11048]이동하기  (0) 2018.07.08
[BOJ-1325]효율적인해킹  (0) 2018.05.26
[BOJ-6603]로또  (0) 2018.05.25
[BOJ-2470]두용액  (0) 2018.05.25
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

컴퓨터 대수 그리고 컴퓨터들의 관계 수가 주어지고
관계 수 만큼 A B 가 주어진다.
A가 B를 신뢰하면 B를 해킹할 때, A도 해킹이 가능하다.
이때 최대로 해킹이 가능한 컴퓨터를 보여주면 된다.
여러 대일 경우 오름차순으로 보여준다.

[문제풀이]


[C++ source code]


'PSNote > Problem Solving' 카테고리의 다른 글

[BOJ-11048]이동하기  (0) 2018.07.08
[BOJ-11286]절대값 힙  (0) 2018.06.07
[BOJ-6603]로또  (0) 2018.05.25
[BOJ-2470]두용액  (0) 2018.05.25
[BOJ-10974]모든순열  (0) 2017.11.22
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

입력된 수의 갯수 중 6개의 집합들을 출력하는 문제

[문제풀이]

[C++ source code]


'PSNote > Problem Solving' 카테고리의 다른 글

[BOJ-11286]절대값 힙  (0) 2018.06.07
[BOJ-1325]효율적인해킹  (0) 2018.05.26
[BOJ-2470]두용액  (0) 2018.05.25
[BOJ-10974]모든순열  (0) 2017.11.22
[BOJ-6086]최대유량  (0) 2017.11.18

+ Recent posts