https://www.acmicpc.net/problem/20291
<코드>
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
string str;
map<string,int>m;
while(n--)
{
cin>>str;
string ans="";
for(int i=0;i<str.size();i++)
{
if(str[i]=='.'){
str.erase(str.begin(),str.begin()+i+1);
m[str]++;
continue;
}
}
}
for(auto it=m.begin();it!=m.end();it++)
{
cout<<(*it).first<<' '<<(*it).second<<'\n';
}
}
<풀이과정>
확장자는 . 이후부터의 문자열이다. 그러므로 .을 발견한 부분까지의 문자열을 제거해주기 위해 str.erase를 사용했다.
더불어 그 이후의 문자열을 map에 저장해준다(key값과 value값(해당 원소의 개수를 의미) 각각 추가)
그리고 확장자가 여러 개면 사전 순으로 출력하라고 되어있는데 map 헤더 자체에서 key값을 기준으로 정렬되기 때문에, 이는 고려하지 않아도 될 사항이다.
'PS > 정렬 알고리즘[Sort]' 카테고리의 다른 글
백준 1015 수열 정렬(c++) (0) | 2022.07.17 |
---|---|
18870 좌표 압축(c++) (0) | 2022.07.13 |
백준 1374 강의실(c++) (1) | 2022.07.11 |
백준 5635 생일(c++) (0) | 2022.07.07 |
백준 10989 수 정렬하기 3(c++) (1) | 2022.07.07 |