본문 바로가기

알고리즘 문제 풀이/Baekjoon

1417 - 국회의원 선거

반응형
SMALL

 

 

1417번: 국회의원 선거

첫째 줄에 후보의 수 N이 주어진다. 둘째 줄부터 차례대로 기호 1번을 찍으려고 하는 사람의 수, 기호 2번을 찍으려고 하는 수, 이렇게 총 N개의 줄에 걸쳐 입력이 들어온다. N은 50보다 작거나 같

www.acmicpc.net

 

힙 문제

 

#include <stdio.h>

int N;
int T;
int R;

int maxComp(int x, int y) { return x > y; }
void swap(int& x, int& y) { int z = x; x = y; y = z; }

struct PQ {
  int hn;
  int heap[100];
  int (*comp)(int, int);

  void init() {
    hn = 0;
    comp = maxComp;
  }

  void push(int x) {
    heap[++hn] = x;

    for (int c = hn; c > 1; c /= 2) {
      if (comp(heap[c], heap[c / 2])) { swap(heap[c], heap[c / 2]); }
      else break;
    }
  }

  int pop() {
    swap(heap[1], heap[hn--]);

    for (int c = 2; c <= hn; c *= 2) {
      if (c < hn && comp(heap[c + 1], heap[c])) { c++; }
      if (comp(heap[c], heap[c / 2])) { swap(heap[c], heap[c / 2]); }
      else break;
    }

    return heap[hn + 1];
  }
} maxq;

void init() {
  maxq.init();

  scanf("%d", &N);
  scanf("%d", &T);

  for(int n = 0; n < N - 1; ++n) {
    int G;

    scanf("%d", &G);

    maxq.push(G);
  }
}

void calculate() {
  while (maxq.hn && maxq.heap[1] >= T) {
    maxq.push(maxq.pop() - 1);
    R++;
    T++;
  }
}

int main(void) {
  freopen("1417.txt", "r", stdin);

  init();

  calculate();

  printf("%d", R);

  return 0;
}

 

이제 알아서 짜진다

반응형
LIST

'알고리즘 문제 풀이 > Baekjoon' 카테고리의 다른 글

1715 - 카드 정렬하기  (1) 2023.12.21
14235 - 크리스마스 선물  (0) 2023.12.21
15903 - 카드 합체 놀이  (1) 2023.12.20
11931 - 수 정렬하기 4  (0) 2023.12.19
10867 - 중복 빼고 정렬하기  (0) 2023.12.19