작성일 :

문제 링크

34009번 - Bob부 멍충이

설명

수열을 적절히 섞을 수 있을 때 Alice가 항상 이길 수 있는지 판단해 승자를 출력하는 문제입니다.


접근법

먼저 수열 길이가 홀수면 첫 점수가 Bob에게 가므로 Alice가 즉시 앞설 수 없어 항상 Bob이 이깁니다.

다음으로 수열 길이가 짝수면 Alice가 먼저 점수를 얻습니다.

이후 큰 수부터 앞에 배치하면 각 쌍마다 Alice가 Bob보다 큰 값을 가져가므로 점수 차이가 계속 양수로 유지됩니다.

마지막으로 길이가 짝수면 Alice, 홀수면 Bob을 출력합니다.



Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
using System;

class Program {
  static void Main() {
    var parts = Console.In.ReadToEnd().Split();
    var idx = 0;
    var n = int.Parse(parts[idx++]);
    for (var i = 0; i < n; i++) idx++;

    Console.WriteLine(n % 2 == 0 ? "Alice" : "Bob");
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int n; cin >> n;
  for (int i = 0; i < n; i++) {
    int x; cin >> x;
  }

  cout << (n % 2 == 0 ? "Alice" : "Bob") << "\n";
  return 0;
}