

풀이과정
내용
코드
코드1(정렬된 vector로 우선순위 나타냄)
더보기
#include <iostream>
#include <queue>
#include<vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int iCaseNum = 0;
cin >> iCaseNum;
for (int i = 0; i < iCaseNum; ++i)
{
queue<int> q;
vector<int> v;
int iInputSize = 0;
int iTargetPos = 0, iTargetValue = 0;
int iOutputCount = 0;
cin >> iInputSize >> iTargetPos;
for (int i = 0; i < iInputSize; ++i)
{
int iValue = 0;
cin >> iValue;
q.push(iValue);
v.push_back(iValue);
}
iTargetValue = v.at(iTargetPos);
sort(v.begin(), v.end());
while (iTargetPos != 0 || v.at(v.size() - 1) != q.front())
{
if (q.front() != v.at(v.size() - 1))
{
q.push(q.front());
q.pop();
}
else
{
q.pop();
v.pop_back();
iOutputCount++;
}
if (iTargetPos != 0) iTargetPos--;
else iTargetPos = v.size() - 1;
}
cout << iOutputCount + 1 << endl;
}
return 0;
}
코드2 (우선순위 큐)
더보기
#include <iostream>
#include <queue>
#include <string>
using namespace std;
int main()
{
int iCaseNum = 0;
cin >> iCaseNum;
for (int i = 0; i < iCaseNum; ++i)
{
queue<pair<int, int>> q;
priority_queue<int> pq;
int iInputSize = 0;
int iTargetIndex = 0;
int iOutputCount = 0;
cin >> iInputSize >> iTargetIndex;
for (int i = 0; i < iInputSize; ++i)
{
int iValue = 0;
cin >> iValue;
q.push({ i,iValue });
pq.push(iValue);
}
while (!q.empty())
{
int currIndex = q.front().first;
int currValue = q.front().second;
q.pop();
if (pq.top() == currValue)
{
pq.pop();
iOutputCount++;
if (currIndex == iTargetIndex)
{
cout << iOutputCount << endl;
break;
}
}
else
{
q.push({ currIndex ,currValue });
}
}
}
return 0;
}
'알고리즘(C++) > 백준 알고리즘' 카테고리의 다른 글
| [백준] C++ 9095번 : 1, 2, 3 더하기 (0) | 2019.11.12 |
|---|---|
| [백준] C++ 1463번 : 1로 만들기 (1) | 2019.11.12 |
| [백준] C++ 10845번 : 큐 (0) | 2019.11.08 |
| [백준] C++ 2504번 : 괄호의 값 (0) | 2019.11.08 |
| [백준] C++ 1874번 : 스택 수열 (0) | 2019.11.07 |