목차
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(const pair<string, int> &a, const pair<string, int> &b){
if(a.second == b.second)
return a.first < b.first;
else
return a.second < b.second;
}
int main() {
int n;
scanf("%d", &n);
vector <pair<string, int>> v;
string tmp_s;
int tmp_l;
bool over_lap = 0;
for(int i=0; i<n; i++){
cin >> tmp_s;
over_lap = 0;
for(int j=0; j<v.size(); j++){
if(v[j].first == tmp_s){
over_lap = 1;
break;
}
}
if(over_lap == 0){
tmp_l = tmp_s.length();
v.push_back(make_pair(tmp_s, tmp_l));}
}
sort(v.begin(), v.end(), compare);
for(int j=0; j<v.size(); j++){
cout << v[j].first << "\n";
}
return 0;
}
사견
우선, String 타입의 문자열의 우선순위와 문자열의 길이 두가지를 비교해야하는 문제이다.
그렇기 때문에
vector <pair<string, int>> v
이렇게 string과 int pair를 가진 vector를 생성해 주었다.
이후, 임시 string 값을 입력 받은 후,
v에 push_back으로 string 값과 , string의 길이를 make_pair하여 입력해 준다.
단, 입력시 string 값이 현재 v내에 존재한다면 push_back을 하지 않는다.
(이는 bool 타입의 over_lap 변수 활용)
그렇게 입력이 된다면
조건에 맞는 compare 함수를 작성 한후 sorting,
vector 내 요소 크기만큼 출력하면 문제 해결이다.
'공부 > 백준' 카테고리의 다른 글
15649번: N과 M(1)(백준 C++) (0) | 2020.11.04 |
---|---|
10814번: 나이순 정렬(백준 C++) (0) | 2020.11.03 |
11650번: 좌표 정렬하기(백준 C++) (0) | 2020.11.01 |
1427번: 소트인사이드(백준 C++) (0) | 2020.10.31 |
2108번: 통계학(백준 C++) (0) | 2020.10.30 |