백준 문제풀이

1181 번 : 단어 정렬

하다블 2023. 5. 6. 18:42
반응형

문제는 다음과 같습니다.

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

 

1181번: 단어 정렬

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

www.acmicpc.net

 

풀이 코드는 다음과 같습니다.

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

bool cmp(string s1,string s2)
{
	if(s1.length()==s2.length())
		return s1<s2;
	else
		return s1.length()<s2.length();
}
int main()
{
	int n;
	cin>>n;
	vector<string>v;
	for(int i{0};i<n;i++)
	{
		string s;
		cin>>s;
		v.push_back(s);	
	}
	sort(v.begin(),v.end(),cmp);
	cout<<v[0]<<"\n";
	for(int i{1};i<n;i++)
	{
		if(v[i-1]==v[i])
			continue;
		else
			cout<<v[i]<<"\n";
	}
	return 0;
}

cmp라는 사용자 정의 함수를 통해 정렬을 하도록 구현했습니다.

중복 제거를 해주어야 하는데 처음에는 unique를 통해 제거할까 했지만 정렬을 한 다음 제거를 해주어야 하기 때문에 차라리 정렬 이후 중복되는 것을 continue 하는 방식으로 제거해 주었습니다.

반응형

'백준 문제풀이' 카테고리의 다른 글

1004 번 : 어린왕자 [AI 풀이 , 후기]  (0) 2023.05.23
10815 번 : 숫자 카드  (0) 2023.05.11
11651 번 : 좌표 정렬하기 2  (0) 2023.05.06
11650 번 : 좌표 정렬하기  (0) 2023.05.06
2587 번 : 대표값2  (0) 2023.05.04