문제 링크: https://www.acmicpc.net/problem/1181
백준 정렬 10단계 - 1181번 단어 정렬을 풀어보았다.
풀이: 사전순으로 정렬을 하고, 그리고 길이순으로 정렬을 하면 된다.
C++의 경우, find 리턴값이 v.end() 면 요소가 있다는 것이고, bool 함수의 리턴값으로 비교함수를 줄 수 있다는 것을 알게 되었다.
C++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(string s1, string s2) // 길이 비교 함수
{
if(s1.size()==s2.size()) return s1<s2; // 길이가 같으면 사전순 비교
else return s1.size()<s2.size();
}
int main()
{
int n;
cin>>n;
vector<string> v;
for(int i=0;i<n;i++)
{
string s;
cin>>s;
if(find(v.begin(),v.end(),s)==v.end()) v.push_back(s); // 중복이 아니어야 벡터에 넣음
}
sort(v.begin(),v.end(),cmp);
for(int i=0;i<v.size();i++)
{
cout<<v[i]<<"\n";
}
}
Python
n=int(input())
lists=set() # 중복 제거
for i in range(n):
lists.add(input())
lists=list(lists)
lists.sort() # 사전순 정렬
lists.sort(key=lambda x:len(x)) # 길이순 정렬
for i in lists: print(i)
Java
'코테용 문제풀이 > 백준' 카테고리의 다른 글
좌표 압축 풀이 (0) | 2023.01.05 |
---|---|
나이순 정렬 풀이 (0) | 2023.01.05 |
좌표 정렬하기 2 풀이 (0) | 2023.01.05 |
좌표 정렬하기 풀이 (0) | 2023.01.04 |
소트인사이드 풀이 (0) | 2023.01.04 |