본문 바로가기
개발/알고리즘 풀이...

[백준] 1181번 문제 풀이

by p_human 2021. 3. 13.

www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

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

www.acmicpc.net

풀이 :

1. 문자열들을 입력받으면서 벡터에 저장

2. 벡터에 저장된 문자열들을 사용자 함수를 이용해서 정렬

3. 정렬된 벡터에서 중복된 문자열들을 제거

4. 최종적으로 계산된 벡터를 순서대로 출력

 

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

bool word_compare(const string& s1, const string& s2) {
	if (s1.length() < s2.length())
		return true;
	else if (s1.length() == s2.length())
		return s1.compare(s2) < 0;
	else
		return false;
}

int main()
{
	int n;
	cin >> n;
	vector<string> v_str;
	string str;
	for (int i = 0; i < n; i++) {
		cin >> str;
		v_str.push_back(str);
	}
	sort(v_str.begin(), v_str.end(), word_compare);
	v_str.erase(unique(v_str.begin(), v_str.end()), v_str.end());
	for (const auto& v : v_str) {
		cout << v << "\n";
	}
}

 

'개발 > 알고리즘 풀이...' 카테고리의 다른 글

[백준] 4949번 문제 풀이  (0) 2021.03.14
[백준] 1764번 문제 풀이  (0) 2021.03.14
[백준] 4796번 문제 풀이  (0) 2021.03.12
[백준] 1946번 문제  (0) 2021.03.10
[백준] 2217번 문제  (0) 2021.03.09