정신과 시간의 방
카테고리
작성일
2024. 7. 3. 21:04
작성자
risehyun
  • 문제

 

  • 풀이
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;

bool compare(string str1, string str2)
{
	// 길이가 같은 경우 사전 순으로 정렬하고
	if (str1.size() == str2.size())
	{
		return str1 < str2;
	}
	// 길이가 다른 경우 짧은 순으로 정렬한다.
	else
	{
		return str1.size() < str2.size();
	}
}

int main() 
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	int n = 0;
	cin >> n;

	vector<string> str;
	string input;

	for (int i = 0; i < n; i++)
	{
		cin >> input;
		str.push_back(input);
	}

	sort(str.begin(), str.end(), compare);
	str.erase(unique(str.begin(), str.end()), str.end());

	vector<string>::iterator iter;

	for (iter = str.begin(); iter != str.end(); ++iter)
	{
		cout << *iter << '\n';
	}
	
	return 0;
}

 

  • 메모
    중복을 삭제하기 위해서 unique를 사용해서 erase 해주었다.
    이전엔 list에서 unique를 사용하는 법에 대해서만 알고 있었는데 vector에서도 이런 방식으로 간단하게 중복되는 원소를 제거할 수 있다는 걸 알게 되었다.