본문 바로가기
Algorithm/문제 풀이 (Problem Solving)

[C++] 백준 1181번 단어정렬 문제풀이

by matters_ 2019. 1. 24.

문제 링크

백준 1181번 단어정렬

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

 

간단한 심화 정렬 문제이다. 

string으로 단어를 받고 sort 함수를 이용해 정렬을 하는데 compare 함수를 따로 길이순으로 반환을 한 후에 

길이가 같다면 알바벳순으로 오름자순 정렬을 하는 형식이다. 

string size 함수를 이용해 길이를 파악하고 길이가 같다면 단순 비교를 통해 함수를 만들었다.

정렬을 공부하는 사람이라면 도움이 많이 될 것이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
bool compare(string a,string b){
    if(a.size()==b.size()){
        return a<b;
    }else{
        return a.size()<b.size();
    }
}
int main(){
    
    vector <string> a;
    string temp;
    int N;
    cin>>N;
    
    for(int i=0;i<N;i++){
        string word;
        cin>>word;
        a.push_back(word);        
    }
    
    sort(a.begin(),a.end(),compare);
    
    for(int i=0;i<N;i++){
        if(temp==a[i])continue;
        cout<<a[i]<<'\n';
        temp=a[i];
    }
    return 0;
}
 
cs

 

댓글