ps 재활 일기... (그럴 실력도 없지만) 그 두 번째 이야기
어제 못 푼 문제 결국 어찌저찌 방법 생각해서 풀었다~ 근데 실버3ㅋㅋㅋㅋㅋㅋ
그래도 못 풀었던 거 풀었고 오랜만에 실버 푼 거니까... 이렇게 조금씩 점차 늘려가도록 하자
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int t, n, m, input, cnt;
cin >> t;
while (t--) {
cnt = 0;
cin >> n >> m;
queue<int> q;
vector<int> v;
for(int i = 0; i < n; i++) {
cin >> input;
q.push(input);
v.push_back(input);
}
sort(v.begin(), v.end());
while (true) {
if(q.front() == v[v.size() - 1]) {
cnt++;
q.pop();
v.pop_back();
if (m == 0) {
break;
}
}
else {
q.push(q.front());
q.pop();
}
m = (m == 0) ? q.size()-1 : m - 1;
}
cout << cnt << '\n';
}
}
기본적인 아이디어는 굉장히 간단함
문서 인풋 받을 때 그걸 큐랑 벡터에 둘 다 넣어주고 벡터는 크기 순으로 정렬하는 거
그리고 그냥 노가다 뜀...ㅋㅋ 그래서 큐 맨 앞에 있는 문서가 중요도가 가장 높아야 되니까 -> 벡터의 맨 뒤에 있어야 하니까 그 조건을 만족하면 큐에서 팝하고 벡터 팝하고 카운트 증가시키는 식
만약 조건을 만족 못하면 큐 프론트에 있는 문서를 다시 푸시해줬음. 이 과정을 계속 반복하는 와중에 또 내가 확인하고 싶은 문서!!를 추적해야 하니까 한 번 이 과정을 돌 때마다 m 값을 1씩 감소시키고, 만약 m이 0일 때는 큐의 맨 뒤로 보내줬음.
그래서 인쇄할 문서가 내가 원하는 문서일 때 -> m이 0(맨 위에 있음) 일 때 break하고 카운트를 출력하는 방식!
물론 이걸 풀면서도... 몇 가지 자잘한 실수를 했다
1. m 0일 때 m 크기를 큐 사이즈 -1로 해줘야 하는데 (인덱스가 0부터 시작해서) -1을 안해서 무한루프 돔
2. 문서 출력하고 벡터에서 팝을 안함;; 그래서 무한루프 돔 근데 이거 팝백하면 다행히 배열 크기도 줄어들더라.. (공식문서 봄) 아주 굿
아무튼 또 한 문제 풀었다 뿌듯하다~ 내일도 풀어야지~