https://www.acmicpc.net/problem/2204
<코드>
#include <iostream>
#include <algorithm>
#include <vector>
#include <utility>
using namespace std;
int main()
{
int n;
while(1)
{
cin>>n;
if(!n) break;
vector<pair<string,int>>v;
vector<pair<string,int>>v2;
for(int i=0;i<n;i++)
{
string s;
cin>>s;
v.push_back(make_pair(s,i));
for(int i=0;i<s.size();i++)
{
if(isupper(s[i]))
{
s[i] = tolower(s[i]);
}
}
v2.push_back(make_pair(s,i));
}
sort(v2.begin(),v2.end());
for(int i=0;i<v.size();i++)
{
if(v2[0].second == v[i].second)
{
cout<<v[i].first<<'\n';
break;
}
}
v.clear();
v2.clear();
}
}
<풀이과정>
이 문제는 대소문자에 관계없이(대문자가 들어가도 상관없음) 오름차순 정렬시킨 첫번째 요소의 값을 물어보는 문제이다.
일단은 pair벡터에 문자열과 순번을 넣어준다. 그 이후에는 문자열에 대문자가 있는지 검사하고, 대문자가 있다면 소문자로 변환해준다(왜냐하면 대소문자에 관계없이 오름차순 정렬이 되어야 되기 때문이다)
그리고 소문자로만 담긴 문자열과 순번을 넣어주고 오름차순 정렬 시켜준다.
그 다음 마무리 단계에서는 v2의 순번과 v의 순번(각각 vector의 두 번째 요소에 담겨있다)이 같은 부분을 찾아준 후,
v의 첫번째 요소 값(원래의 대문자와 소문자가 섞여있는 문자열)을 반환해주면 된다.
'PS > 정렬 알고리즘[Sort]' 카테고리의 다른 글
백준 1764 듣보잡(c++) (1) | 2022.08.29 |
---|---|
백준 10825 국영수(c++) (0) | 2022.08.26 |
백준 1377 버블소트(c++) (0) | 2022.08.26 |
백준 2628 종이자르기(c++) (1) | 2022.08.23 |
백준 11652 카드(c++) (0) | 2022.08.19 |