[백준 30822] UOSPC 세기 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
문자열의 문자들을 재배열해 ‘uospc’를 최대 몇 번 만들 수 있는지 묻는 문제입니다. 각 패턴에 필요한 문자는 u, o, s, p, c가 하나씩입니다.
접근법
하나의 패턴을 만들려면 u, o, s, p, c가 각각 하나씩 필요합니다. 따라서 만들 수 있는 패턴의 최대 개수는 이 다섯 문자의 등장 횟수 중 가장 적은 값으로 결정됩니다.
문자열을 순회하며 각 문자의 빈도를 센 뒤, 다섯 문자의 빈도 중 최솟값을 출력하면 됩니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
class Program {
static void Main() {
var n = int.Parse(Console.ReadLine()!);
var s = Console.ReadLine()!;
var cnt = new int[256];
foreach (var ch in s)
cnt[ch]++;
var chars = new[] { 'u', 'o', 's', 'p', 'c' };
var ans = int.MaxValue;
foreach (var ch in chars)
ans = Math.Min(ans, cnt[ch]);
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
25
#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
string s; cin >> s;
vi cnt(256, 0);
for (char c : s)
cnt[(unsigned char)c]++;
string need = "uospc";
int ans = INT_MAX;
for (char c : need)
ans = min(ans, cnt[(unsigned char)c]);
cout << ans << "\n";
return 0;
}