문제의 취지에 맞게 queue 자료구조를 사용해서 풀었다.
큐는 맨 앞에 원소값만 참조할 수 있기때문에 임시 큐를 생성하여 전체 원소들과 비교하였다.
코드는 다음과 같이 진행된다.
맨 앞의 원소와 뒤에 원소들 비교 --> 더 큰 원소가 존재한다면 해당 원소를 맨 뒤로 보냄 --> 더 큰 원소가 존재하지 않을 때까지 반복 --> 찾고있는 원소 위치와 비교 --> 틀리다면 횟수 1증가, 앞에 원소 제거 --> 맞다면 횟수 출력
#include <iostream>
#include <queue>
using namespace std;
queue<int> wait;
int Solution(int find, int cnt)
{
queue<int> temp = wait;
int pick = temp.front();
int len = temp.size();
for (int i = 0; i < len; i++)
{
if (pick < temp.front())
{
wait.pop();
wait.push(pick);
if (find == 0) find = len - 1;
else find--;
return Solution(find, cnt);
}
else temp.pop();
}
cnt++;
if(find != 0)
{
wait.pop();
find--;
return Solution(find, cnt);
}
else return cnt;
}
int main(void)
{
int testcase;
cin >> testcase;
while (testcase--)
{
int imp, fd;
cin >> imp >> fd;
for (int i = 0; i < imp; i++)
{
int n;
cin >> n;
wait.push(n);
}
cout << Solution(fd, 0) << endl;
while (!wait.empty()) wait.pop();
}
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
알고리즘 200일 프로젝트 - 8day
다른 사람들은 우선순위큐를 사용하여 쉽게 풀었는데, 나는 STL 사용법이 익숙치 않아서 무식하게 풀이한거 같다.
얼른 STL 공부해서 더 효율적인 방법으로 다시 한번 풀어보도록 해야겠다.
내일도 열심히!
'알고리즘 > BOJ' 카테고리의 다른 글
백준 1018번: 체스판 다시 칠하기 (0) | 2020.04.13 |
---|---|
백준 1182번: 부분수열의 합 (0) | 2020.04.13 |
백준 14888번: 연산자 끼워넣기 (0) | 2020.04.12 |
백준 6603번: 로또 (0) | 2020.04.12 |
백준 7568번: 덩치 (0) | 2020.04.11 |