Skip to content

Latest commit

 

History

History
91 lines (66 loc) · 2.43 KB

프로그래머스(프린터).md

File metadata and controls

91 lines (66 loc) · 2.43 KB

<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 문제를 풀면서 많이 반성했다... 그냥 어떻게든 풀어야겠다는 생각을 넘어서서 효율적인 코드를 짜려는 노력을 해야 한다.