알고리즘/BOJ

백준 2890번 카약

꾸준함. 2018. 11. 9. 20:33

문제 링크입니다: https://www.acmicpc.net/problem/2890


재미있는 문자열 처리 문제였습니다.


알고리즘은 아래와 같습니다.

1. 카약의 머리 부분의 위치와 배 번호를 pair로 합쳐서 벡터에 넣습니다.

2. 카약의 머리 부분 위치를 기준으로 내림차순으로 정렬합니다.

3. 2번을 기준으로 랭크를 부여합니다.


#include <iostream>

#include <vector>

#include <string>

#include <algorithm>

#include <functional>

using namespace std;

 

const int MAX = 50;

 

int R, C;

string s[MAX];

int arr[MAX];

 

bool cmp(pair<int, int> a, pair<int, int> b)

{

        if (a.first > b.first)

                 return true;

        return false;

}

 

int main(void)

{

        ios_base::sync_with_stdio(0);

        cin.tie(0);

        cin >> R >> C;

 

        vector<pair<int, int>> v; //카약의 머리 위치, 카약 번호

        for (int i = 0; i < R; i++)

        {

                 cin >> s[i];

                 for (int j = s[i].length() - 1; j >= 0; j--)

                         if (s[i][j] >= '1' && s[i][j] <= '9')

                         {

                                 v.push_back({ j, s[i][j]-'0' });

                                 break;

                         }

        }

 

        //카약 위치를 기준으로 정렬

        sort(v.begin(), v.end(), cmp);

 

        int rank = 1;

        arr[v[0].second] = rank;

        int prev = v[0].first;

        for (int i = 1; i < v.size(); i++)

                 if (prev == v[i].first)

                         arr[v[i].second] = rank;

                 else

                 {

                         arr[v[i].second] = ++rank;

                         prev = v[i].first;

                 }

        for (int i = 1; i <= 9; i++)

                 cout << arr[i] << "\n";

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형