https://www.acmicpc.net/problem/1966
[ 코드 ]
#include <iostream>
#include <queue>
using namespace std;
int main() {
int answer = 0;
int test_case;
cin >> test_case;
int n, m, ipt; //문서 길이, 원하는 location, 중요도(important)
for (int i = 0; i < test_case; ++i) {
answer = 0;
cin >> n >> m;
queue<pair<int, int>> q;
priority_queue<int> pq;
for (int j = 0; j < n; j++) {
cin >> ipt;
q.push({ j, ipt });
pq.push(ipt);
}
while (!q.empty()) {
int n = q.front().first;
int p = q.front().second;
q.pop();
if (p == pq.top()) {
pq.pop();
answer++;
if (n == m) {
cout << answer << endl;
break;
}
}
else
q.push({ n,p });
}
}
}
솔직히 프로그래머스의 프린터 문제를 푸는 김에 백준 문제 수나 올리자고 바로 도전한 문제였다.
그런데 생각보다 변형하는 것도 귀찮았고, 또 까다로웠고,
main() 함수 안에 인자를 바로 안 주는 것 : cin
return 값으로 주는 것이 아닌 것 : cout
또 입력할 케이스 갯수가 정해져서 따로 for문을 돌려야하는 것
이것도 매우 사람을 귀찮게 만들었다.
결론적으로 다른 문제보다 2배는 더 걸려서 푼 것 같다...... ㅂㄷㅂㄷㅂㄷㅂㄷ
대신 프로그래머스는 입력이 이미 주어진 곳에서 푸는 것이고,
이 문제는 직접 입력값을 주는 문제이다보니 생략할 수 있는 부분이 있었다.
중요도 부분에서,
vector <int> priorities;
for(int i=0; i<N; i++){
int tmp = 0;
cin >> tmp;
priorities.push_back(tmp); //문서 순서대로 받음.
}
for(int i = 0; i < priorities.size(); i++){
q.push(make_pair(i, priorities[i]));
priq.push(priorities[i]);
}
예컨데 뭐 이런 식으로 두번에 걸쳐 하게 한 것을 그냥 그럴 필요 없이 인자 ipt로 하게 한 것이 훨 간단했다.
그리고 다른 사람의 코드를 보니 make_pair로 쓰지 않고 직접 넣은 부분도 나에게는 훨씬 쉬워 보이고 인상적이었다.
아 그리고!
백준에서 언어를 c++로 두고 푸는 당신,
pair를 만들 때,
queue <pair<int, int>> q;
이것을
queue <pair<int, int> > q;
이런 식으로 띄어쓰기하라고 백준이 꼽줄 수도 있다.
이 문제는 c++의 버전 문제이니 c++14 등 상위 버전에서는 괜찮다는 것을 알아두면 좋다.
* 오늘의 교훈
코드를 재활용하는 것도 참 좋지만, 그래도 다시 푸는 것도 나쁘지 않다.
(아니 사실 많이 나쁘다. 코드 날리고 두번째로 또 푸는 기분)
make_pair를 간단하게 생략 가능하다.
c++의 버전 차이를 알아두자.
'Algorithm > 백준' 카테고리의 다른 글
[백준] 1436번 : 영화감독 숌 / c++14 (0) | 2020.05.27 |
---|---|
[백준] 2798번 : 블랙잭 / c++ (0) | 2020.05.27 |
[백준] 1874번 : 스택 수열 / c++ (0) | 2020.05.22 |
[백준] 10828번 : 스택 / c++ (0) | 2020.05.22 |
[백준] 1157번 : 단어 공부 / c++ (0) | 2020.05.22 |