[백준 11195] Peragrams (C#, C++) - soo:bak
작성일 :
문제 링크
설명
주어진 문자열에서 문자를 제거해 어떤 팰린드롬의 애너그램이 되도록 할 때 최소 제거 수를 구하는 문제입니다.
접근법
먼저 각 문자의 등장 횟수를 센 뒤 홀수 개의 문자가 몇 종류인지 확인합니다.
다음으로 팰린드롬이 되려면 홀수 개수인 문자는 한 종류만 남을 수 있으므로, 나머지 홀수 개수들은 한 글자씩 제거해야 합니다.
마지막으로 홀수 종류 수에서 1을 뺀 값이 최소 제거 수가 됩니다.
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 s = Console.ReadLine()!;
var cnt = new int[26];
for (var i = 0; i < s.Length; i++) {
cnt[s[i] - 'a']++;
}
var odd = 0;
for (var i = 0; i < 26; i++) {
if (cnt[i] % 2 == 1) odd++;
}
var ans = odd == 0 ? 0 : odd - 1;
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
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s; cin >> s;
int cnt[26] = {};
for (char c : s) cnt[c - 'a']++;
int odd = 0;
for (int i = 0; i < 26; i++) {
if (cnt[i] % 2 == 1) odd++;
}
int ans = odd == 0 ? 0 : odd - 1;
cout << ans << "\n";
return 0;
}