<c++>
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
typedef struct{
int num, priority;
}Printing;
int solution(vector<int> priorities, int location) {
queue<Printing> q;
for(int i=0;i<priorities.size();i++){
q.push({i, priorities[i]});
}
sort(priorities.begin(), priorities.end(), greater<>());
int n = 0;
while(1){
int nextNum = q.front().num;
int nextPriority = q.front().priority;
q.pop();
if(priorities[n] == nextPriority && location == nextNum){
return n+1;
}
if(priorities[n] == nextPriority){
n++;
}
else{
q.push({nextNum, nextPriority});
}
}
}
<js>
function solution(priorities, location) {
let tmpPriorities = priorities.slice();
let arr = [];
for(let i =0;i<priorities.length;i++){
arr.push({num: i, priority: priorities[i]});
}
tmpPriorities.sort().reverse();
let n =0;
while(1){
let nextNum = arr[0].num;
let nextPriority = arr[0].priority;
arr.shift();
if(tmpPriorities[n]==nextPriority && location==nextNum){
return n+1;
}
if(tmpPriorities[n]==nextPriority){
n++;
continue;
}
arr.push({num: nextNum, priority: nextPriority})
}
}
일단, C++로는 쉽게 풀 수 있는 문제였다. 설명되어 있는 문제 명세서를 그대로 구현하면 됐다. 하지만, 이 C++로 짠 개념을 자바스크립트로 변환하기가 너무 어려웠다....
일단 자바스크립트에는 따로 C++처럼 큐에 대한 라이브러리가 없다. 때문에 단순한 배열을 마치 큐처럼 사용해야 한다.(스택도 비슷한 방식으로 하면 될 듯)
또한, arr.push({num: i, priority: priorities[i]});
이런 JSON 스러운 배열도 만들 수 있다는 것을 알게 되었다. 앞으로도 이런 모양은 되게 많이 사용할 것 같다.
효율적인 코드를 짜는 노력은 거의 하지 않다가 최근 codility 문제를 풀면서 많이 반성했다... 그냥 어떻게든 풀어야겠다는 생각을 넘어서서 효율적인 코드를 짜려는 노력을 해야 한다.