본문 바로가기
알고리즘 문제 풀이

[백준]단어 정렬 - 복습

by pinok1o 2021. 3. 22.

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

 

길이가 같은 경우 사전순으로 나열하기 위해 백터에 스트링과 가중치 저장

 

라이브러리 sort에서 비교함수를 만들어서 사용하는 방법
sort(vec.begin(), vec.end(), cmp_STR);

 

백터 사용
struct STR
{
string u;
int weight;
};
vector vec;
vec.push_back(temp);

 

 

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

struct STR
{
    string u;
    int weight;
};
vector<STR> vec;

int calculateWeight(string u)
{
    int weight = 0;
    for (int i = 0; i < u.length(); i++)
        weight += int(u[i]);

    return weight;
}

bool cmp_STR(STR a, STR b)
{
    if (a.u.length() < b.u.length()) {
        return true;
    }
    else if (a.u.length() == b.u.length()) {
        return a.u < b.u;
    }
    else {
        return false;
    }
}

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

    int N;
    cin >> N;

    STR temp;
    string u;
    int weight = 0;
    for (int i = 0; i < N; i++)
    {
        cin >> u;
        weight = calculateWeight(u);
        temp.u = u;
        temp.weight = weight;
        vec.push_back(temp);
    }

    sort(vec.begin(), vec.end(), cmp_STR);

    string preU = "";
    string U;
    for (int i = 0; i < N; i++)
    {
        U = vec[i].u;
        if (preU.compare(U) != 0) {
            cout << U << "\n";
        }
        preU = U;
    }
}

'알고리즘 문제 풀이' 카테고리의 다른 글

[백준]DFS와 BFS - 복습  (0) 2021.03.31
[백준]부분수열의 합 - 복습  (0) 2021.03.22
[백준]RGB거리 - 복습 DP  (0) 2021.03.17
[백준] 한 줄로 서기 - 복습  (0) 2021.03.17
[백준] 트리 - 복습  (0) 2021.02.05

댓글