PS/정렬 알고리즘[Sort]

백준 2204 도비의 난독증 테스트(c++)

SeungbeomKim 2022. 10. 9. 17:31
반응형

https://www.acmicpc.net/problem/2204

 

2204번: 도비의 난독증 테스트

꿍은 도비에게 영어단어들을 제시한 후 어떤 단어가 대소문자를 구분하지 않고 사전순으로 가장 앞서는지 맞추면 양말을 주어 자유를 얻게해준다고 하였다. 하지만 인성이 좋지 않은 꿍은 사실

www.acmicpc.net

<코드>

#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