작성일 :

문제 링크

16204번 - 카드 뽑기

설명

앞면에 O가 M장, X가 N−M장 있는 카드에 대해, 뒷면에 O를 K장, X를 N−K장 적을 때 앞뒤가 같은 카드의 최대 개수를 구하는 문제입니다.


접근법

앞뒤가 같으려면 앞면 O인 카드에 뒷면도 O를 적거나, 앞면 X인 카드에 뒷면도 X를 적어야 합니다. 앞면 O인 카드는 M장이고 뒷면에 적을 O는 K개이므로, 둘 중 작은 수만큼 앞뒤 O를 맞출 수 있습니다. 마찬가지로 앞면 X인 카드는 N-M장이고 뒷면에 적을 X는 N-K개이므로, 둘 중 작은 수만큼 앞뒤 X를 맞출 수 있습니다. 두 값을 더하면 됩니다.



Code

C#

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

class Program {
  static void Main() {
    var parts = Console.ReadLine()!.Split();
    var n = int.Parse(parts[0]);
    var m = int.Parse(parts[1]);
    var k = int.Parse(parts[2]);

    var ans = Math.Min(m, k) + Math.Min(n - m, n - k);
    Console.WriteLine(ans);
  }
}

C++

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

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

  int n, m, k; cin >> n >> m >> k;
  cout << min(m, k) + min(n - m, n - k) << "\n";

  return 0;
}