반응형
이 문제를 푸는데 조금 오랜 시간이 걸렸다.
왜냐하면 문제의 설명이 다소 이해하기 어려웠기 떄문이다.
처음에 풀었던 방식은 큐 배열을 이용해서 중요도에 따라 다른 큐에 순차적으로 집어넣는 방식으로 했지만,
{1, 1, 9, 1, 1, 1}의 경우 0번 인덱스가 3번 인덱스보다 늦게 나와야 하므로 위의 방법은 틀리다.
그래서 리스트를 이용하여 맨 앞 인덱스의 중요도 보다 높은 인덱스가 있는지 스캔하며
있으면 push_back, pop_front를 이용해 문제에 주어진 작동방식대로 구현했다.
goto 문을 유용하게 이용한 것 같다.
#include <cstdio>
#include <list>
using namespace std;
int main()
{
int T;
scanf("%d", &T);
while (T--) {
int N, M;
scanf("%d %d", &N, &M);
list<pair<int, int>> papers;
for (int i = 0; i < N; i++) {
int importance;
scanf("%d", &importance);
papers.push_back(make_pair(i, importance));
}
int order = 1;
while (true) {
for (auto iter = papers.begin(); iter != papers.end(); ++iter) {
if ((*iter).second > papers.front().second) {
papers.push_back(papers.front());
papers.pop_front();
goto NEXT;
}
}
if (papers.front().first == M) {
printf("%d\n", order);
break;
}
papers.pop_front();
order++;
NEXT:;
}
}
return 0;
}
pair를 리스트의 요소 타입으로 지정하여 first에는 처음 인덱스, second에는 중요도를 넣었다.
이렇게 지정함으로써 출력하고자 하는 문서를 특정할 수 있다.
PS. 나중에 보니 리스트 보다는 덱을 쓰는 편이 더 낫지 않았을까 싶다.
반응형
'프로그래밍 > PS' 카테고리의 다른 글
[C++] 백준 2108번: 통계학 (2) | 2020.09.23 |
---|---|
[C++] 백준 11866번: 요세푸스 문제 0 (0) | 2020.09.23 |
[C++] 백준 11650번: 좌표 정렬하기 (0) | 2020.09.22 |
[C++] 백준 2775번: 부녀회장이 될테야 (0) | 2020.09.22 |
[C++] 백준 2869번: 달팽이는 올라가고 싶다 (0) | 2020.09.21 |