[백준] 정렬 1181번: 단어 정렬

C.K. ·2022년 6월 25일
0

baekjoon

목록 보기
34/67

문제

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

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

입력

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

출력

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

Approach

  • vector<pair<int, string>> 형식으로 단어의 길이와 그 단어를 벡터의 한 요소로 함께 넣는다. 이 벡터에 sort함수를 사용하면 먼저 단어의 길이 오름차순 정렬, 그리고 사전 순으로 오름차순 정렬이 가능하다
  • 한 단어의 중복 출력을 피한다

Source Code

# include <iostream>
# include <queue>
# include <vector>
#include <string>
#include <algorithm>
#include <cctype>
using namespace std;


int main()
{
    int n; // 단어 갯수 입력받기
    cin >> n;
    
    // 단어길이와 단어를 담는 배열
    vector<pair<int,string>> vec;
    
    // 각 단어와 길이를 입력받고 배열에 저장
    for (int i = 0; i < n; i++)
    {
        string word;
        cin >> word;
        int len = word.length();
        
        vec.push_back({len, word});
    }
    
    // 정렬
    sort(vec.begin(), vec.end());
    
    // 단어 확인하면서 중복 출력 피하기 
    for (int j = 0; j < n; j++)
    {
        if (vec[j].second == vec[j+1].second)
            continue;
       
        cout << vec[j].second << '\n';
    }
    
    return 0;
}
profile
1일 1알고리즘

0개의 댓글