작성일 :

문제 링크

11908번 - 카드

설명

구현 문제입니다.

설명은 다음과 같습니다.

n 개의 카드들 중에서, 문제의 조건에 따라 2 장 씩 뒤집어 숫자를 확인합니다.

그 중 작은 수의 카드는 주머니에, 큰 수 카드는 다시 바닥에 내려놓는 과정을 계속 반복한다면,
결국 전체의 카드들 중 가장 큰 수 카드 한 장만 바닥에, 나머지 모든 카드들은 주머니에 들어있게 됩니다.

따라서, 전체 카드들 중 가장 큰 숫자 카드를 제외한 나머지 모든 카드의 숫자 합이 가능한 최대합이 됩니다.


Code

[ C# ]

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
namespace Solution {
  class Program {
    static void Main(string[] args) {

      int.TryParse(Console.ReadLine(), out int n);

      string[]? input = Console.ReadLine()?.Split();

      List<int> lst = new List<int>();
      for (int i = 0; i < n; i++) {
        int.TryParse(input?[i], out int num);
        lst.Add(num);
      }

      lst.Sort();

      int ans = 0;
      for (int i = 0; i < n - 1; i++)
        ans += lst[i];

      Console.WriteLine(ans);

    }
  }
}



[ C++ ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <bits/stdc++.h>

using namespace std;

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

  int n; cin >> n;
  vector<int> v(n, 0);

  for (int i = 0; i < n; i++)
    cin >> v[i];

  sort(v.begin(), v.end());

  int ans = 0;
  for (int i = 0; i < n - 1; i++)
    ans += v[i];

  cout << ans << "\n";

  return 0;
}