[백준 9056] Letter Bank (C#, C++) - soo:bak
작성일 :
문제 링크
설명
두 단어가 같은 문자 집합으로 이루어져 있는지 판별하는 문제입니다.
접근법
두 번째 단어의 문자들을 집합에 저장합니다.
첫 번째 단어의 각 문자가 집합에 있는지 확인하고, 있으면 집합에서 제거합니다. 없으면 NO입니다.
모든 문자를 처리한 후 집합이 비어있으면 YES, 아니면 NO를 출력합니다.
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
using System;
using System.Collections.Generic;
using System.Text;
class Program {
static bool Solve(string a, string b) {
var s = new HashSet<char>(b);
foreach (var c in a) {
if (!s.Contains(c))
return false;
s.Remove(c);
}
return s.Count == 0;
}
static void Main() {
var parts = Console.In.ReadToEnd().Split((char[])null, StringSplitOptions.RemoveEmptyEntries);
var idx = 0;
var t = int.Parse(parts[idx++]);
var sb = new StringBuilder();
for (var tc = 0; tc < t; tc++) {
var a = parts[idx++];
var b = parts[idx++];
sb.AppendLine(Solve(a, b) ? "YES" : "NO");
}
Console.Write(sb);
}
}
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
#include <bits/stdc++.h>
using namespace std;
typedef set<char> sc;
bool solve() {
string a, b; cin >> a >> b;
sc s(b.begin(), b.end());
for (char c : a) {
if (s.find(c) == s.end())
return false;
s.erase(c);
}
return s.empty();
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t; cin >> t;
while (t--)
cout << (solve() ? "YES" : "NO") << "\n";
return 0;
}