본문 바로가기

백준 문제 풀이/c++

백준 1181번 "단어 정렬" -- c++

728x90

안녕하세요! 오늘은 백준 1181번 "단어 정렬" 문제를 풀어보겠습니다.

문제 설명

  • 알파벳 소문자로 이루어진 N개의 단어가 주어진다.
  • 이를 길이와 사전 순으로 정렬하여 출력하는 프로그램을 작성하시오.

입력

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

출력

  • 조건에 따라 정렬된 단어를 출력한다.

풀이 방법

입력으로는 단어의 개수 N과 N개의 단어가 주어집니다. 이 때, N은 1 이상 20,000 이하의 정수이며, 주어지는 단어들은 알파벳 소문자로 이루어져 있습니다. 단어의 길이는 50을 넘지 않습니다.

이 문제를 해결하는 가장 간단한 방법은 정렬 알고리즘을 사용하는 것입니다. C++에서는 표준 라이브러리 함수인 sort()를 이용할 수 있습니다.

아래는 이 문제를 해결할 수 있는 C++ 코드입니다:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool compare(string a, string b) {
    if (a.length() == b.length()) {
        return a < b;
    }
    return a.length() < b.length();
}

int main() {
    int N;
    cin >> N;
    vector<string> words(N);

    for (int i = 0; i < N; i++) {
        cin >> words[i];
    }

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

    words.erase(unique(words.begin(), words.end()), words.end());

    for (int i = 0; i < words.size(); i++) {
        cout << words[i] << endl;
    }

    return 0;
}

이 코드는 먼저 입력으로 받은 단어들을 vector에 저장한 후, sort() 함수를 사용해 조건에 맞게 정렬합니다. 그리고 중복된 단어는 제거한 후, 정렬된 결과를 출력합니다. 이렇게 간단한 정렬 알고리즘을 이용하여 문제를 해결할 수 있습니다.

728x90