작성일 :

문제 링크

7280번 - Kortos

설명

52장의 표준 덱에서 한 장이 빠졌을 때, 주어진 51장의 목록으로 누락된 카드를 찾는 문제입니다.


카드는 S, B, V, K 네 가지 문양과 1~13의 값으로 구성됩니다.


접근법

각 문양별로 1~13까지의 카드가 있는지 체크하는 배열을 만듭니다. 입력으로 주어진 51장을 체크한 뒤, 체크되지 않은 한 장을 찾아 출력합니다.


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
26
27
28
29
30
31
32
33
34
using System;

class Program {
  static (string, int) FindMissing(bool[,] seen) {
    var suits = new[] { "S", "B", "V", "K" };
    for (var s = 0; s < 4; s++) {
      for (var v = 1; v <= 13; v++) {
        if (!seen[s, v])
          return (suits[s], v);
      }
    }
    return ("", -1);
  }

  static void Main() {
    var seen = new bool[4, 14];

    for (var i = 0; i < 51; i++) {
      var parts = Console.ReadLine()!.Split();
      var suit = parts[0][0] switch {
        'S' => 0,
        'B' => 1,
        'V' => 2,
        'K' => 3,
        _ => -1
      };
      var val = int.Parse(parts[1]);
      seen[suit, val] = true;
    }

    var (suitStr, value) = FindMissing(seen);
    Console.WriteLine($"{suitStr} {value}");
  }
}

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
26
27
28
29
30
31
32
#include <bits/stdc++.h>
using namespace std;

int suitId(char c) {
  if (c == 'S') return 0;
  if (c == 'B') return 1;
  if (c == 'V') return 2;
  return 3;
}

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

  bool seen[4][14] = {false};
  for (int i = 0; i < 51; i++) {
    char c; int v; cin >> c >> v;
    seen[suitId(c)][v] = true;
  }

  const char suits[4] = {'S', 'B', 'V', 'K'};
  for (int s = 0; s < 4; s++) {
    for (int v = 1; v <= 13; v++) {
      if (!seen[s][v]) {
        cout << suits[s] << " " << v << "\n";
        return 0;
      }
    }
  }

  return 0;
}