문제풀이(Problem Solving)

백준, BOJ, 1181번 C++ [CPP]

게임이 더 좋아 2021. 6. 7. 21:30
반응형
728x170

쉬운 문제지만

sort에서 cmp를 이용하는 문제고 문자열을 이용해서 익혀볼만 하다.

 

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

 

 


 

[문제풀이(Problem Solving)/C++ 문제풀이에 유용한 것들] - set처럼 vector에서도 중복된 것들 없애기, unique()

위 글이 도움이 될 것이다.

 

#맞는 풀이

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>

using namespace std;

int N;
vector<string> vec;

bool cmp(string s1, string s2){
    //길이가 작은 것이면 앞으로
    if(s1.length() < s2.length()){
        return true;
    }else if(s1.length() == s2.length()){ // 길이가 같으면 사전순으로
         return s1<s2;
        
    }else{
        return false;
    }
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> N;
    
    while(N--){
        string s;
        cin >> s;
        vec.push_back(s);
    }
    
    sort(vec.begin(), vec.end(), cmp);
    //유일하게 남기기
    vec.erase(unique(vec.begin(), vec.end()), vec.end());


    
    for(string s : vec){
        cout << s << "\n";
    }
}

핵심은

cmp이다.

문자열의 사전순 비교할 때 

그냥 s1 < s2한 이유는

일반적으로 사전순이란 것이 문자열 값이 작은 것이 앞으로 가는 것이 지정되어 있기 때문이다.

728x90
반응형
그리드형

'문제풀이(Problem Solving)' 카테고리의 다른 글

백준, BOJ, 2580번 C++ [CPP]  (0) 2021.06.08
백준, BOJ, 11562번 C++ [CPP]  (0) 2021.06.08
백준, BOJ, 18870번 C++ [CPP]  (0) 2021.06.07
백준, BOJ, 15650번 C++ [CPP]  (0) 2021.06.06
백준, BOJ, 14501번 C++ [CPP]  (0) 2021.06.06