본문 바로가기
알고리즘 문제풀이/백준

[백준 2262] 토너먼트 만들기

by m2162003 2020. 12. 31.

www.acmicpc.net/problem/2262

 

2262번: 토너먼트 만들기

월드시에서는 매년 n명의 사람들이 모여 월드 크래프트라는 게임의 토너먼트 대회를 치른다. 이 게임은 특성상 실력만이 승패를 좌우하기 때문에, 아무리 실력이 엇비슷한 사람이 시합을 치러

www.acmicpc.net

그리디 알고리즘

첨에 우선순위큐를 쓰려했는데 위치가 고정이라 힘들것 같아서 단순 배열을 사용했다.

 

로직은 이렇다.

가장 큰 등수인 n부터 양쪽을 살펴서 차이가 작은 쪽을 택해서 그 차를 정답에 더하는 것이다.

그리고 나서 가장 큰 등수는 팝해준다.

#include <stdio.h>
#include <queue>

using namespace std;

int n;
int arr[256];

int main(void)
{
  scanf("%d", &n);
  for (int i = 0; i < n; i++)
  {
    scanf("%d", &arr[i]);
  }

  int res = 0;
  int sze = n;

  for (int i = n; i > 1; i--)
  {
    int mi = 0;
    for (int j = 0; j < sze; j++)
    {
      if (arr[j] == i)
      {
        mi = j;
        break;
      }
    }
    if (mi == 0)
    {
      res += i - arr[1];
    }
    else if (mi == sze - 1)
    {
      res += i - arr[sze - 2];
    }
    else
    {
      res += (arr[mi - 1] > arr[mi + 1]) ? i - arr[mi - 1] : i - arr[mi + 1];
    }
    sze--;
    for (int i = mi; i < sze; i++)
    {
      arr[i] = arr[i + 1];
    }
  }
  printf("%d\n", res);

  return 0;
}

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

[백준 2015] 수들의 합 4  (0) 2021.01.01
[백준 6118] 숨바꼭질  (0) 2021.01.01
[백준 20310] 타노스  (0) 2020.12.31
[백준 17392] 우울한 방학  (0) 2020.12.31
[백준 16112] 5차 전직  (0) 2020.12.31

댓글