문제 링크입니다: 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
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 16394번 홍익대학교 (0) | 2018.11.10 |
---|---|
백준 5211번 가단조와 다장조 (0) | 2018.11.09 |
백준 10546번 배부른 마라토너 (0) | 2018.11.09 |
백준 4949번 균형잡힌 세상 (11) | 2018.11.09 |
백준 5612번 터널의 입구와 출구 (0) | 2018.11.07 |