본문 바로가기
Problem Solving/BOJ

[백준] 1181번 - 단어 정렬

by 테리는당근을좋아해 2020. 1. 7.

문제 >

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.

  1. 길이가 짧은 것부터
  2. 길이가 같으면 사전 순으로

 

입력 >

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

 

출력 >

조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.

 

해결방법 > 

1. 문자열 길이

2. 사전순

3. 중복 단어 제거

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

using namespace std;

bool compare(pair<string, int> a, pair<string,int> b){
    if(a.second == b.second){
        return a.first < b.first;
    }
    else{
        return a.second < b.second;
    }
}

int main(){
    int num;
    string s;
    string temp;
    vector <pair<string, int> > v;
    cin >> num;
    
    for(int i = 0; i < num; i++){
        cin >> s;
        v.push_back(pair<string, int>(s, s.size()));
    }

    sort(v.begin(), v.end(), compare);

    for(int i = 0; i < v.size(); i++){
        if(i > 0 && v[i].first == v[i-1].first){
            continue;
        }
        cout << v[i].first << endl;
    }
    return 0;
}

문제링크 >

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

 

1181번: 단어 정렬

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

www.acmicpc.net

 

'Problem Solving > BOJ' 카테고리의 다른 글

[백준] 1712번 - 손익분기점  (0) 2020.01.07
[백준] 1427번 - 소트인사이드  (0) 2020.01.07
[백준] 1193번 - 분수찾기  (0) 2020.01.07
[백준] 1085번 - 직사각형에서 탈출  (0) 2020.01.07
[백준] 1026번 - 보물  (0) 2020.01.07

댓글