※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 7587번 문제인 Anagrams다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/7587
어떤 두 문자열이 anagram인 관계라면 각 문자열을 구성하는 문자들을 알파벳순으로 정렬했을 때 얻을 수 있는 두 문자열이 같고, 그 역 또한 성립함을 관찰하자.
이를 이용하면 각 문자열을 구성하는 문자들을 정렬해 얻은 문자열을 이용해 두 문자열이 anagram인 관계를 확인하는 것이 가능하다.
map을 이용해 문자가 정렬된 문자열 별로 가장 먼저 등장한 원본 문자열이 무엇인지, 그리고 그러한 문자열이 몇 개 등장했는지 관리해 문제를 해결하자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
#include <cstring>
using namespace std;
int N;
map<string, int> mpidx;
int cnt[1000]; string mpstr[1000];
void solve() {
mpidx.clear();
memset(cnt, 0, sizeof(cnt));
for (int i = 0; i < N; i++) {
string s; cin >> s;
string ss = s;
sort(s.begin(), s.end());
if (mpidx.count(s)) cnt[mpidx[s]]++;
else {
mpidx[s] = i;
cnt[i] = 1, mpstr[i] = ss;
}
}
int mx = 0, ansid;
for (int i = 0; i < N; i++) {
if (cnt[i] > mx) mx = cnt[i], ansid = i;
}
cout << mpstr[ansid] << ' ' << mx - 1 << '\n';
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
while (N) {
solve();
cin >> N;
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 26092 // C++] 수학적인 최소 공통 조상 (0) | 2024.06.26 |
---|---|
[BOJ 12946 // C++] 육각 보드 (0) | 2024.06.25 |
[BOJ 27738 // C++] 연산자 파티 (0) | 2024.06.23 |
[BOJ 13352 // C++] 석양이 진다... (0) | 2024.06.22 |
[BOJ 2187 // C++] 점 고르기 (0) | 2024.06.21 |