[プログラマ高得点Kit]スタック/キュープリンタ(level 2)
質問する
一般的なプリンタでは、必要な印刷順に印刷されます.したがって、重要なドキュメントは後で印刷される可能性があります.この問題を解決するために,重要文書を先に印刷するプリンタを開発した.この新しく開発されたプリンタは、次のように印刷されます.
印刷待ちリスト
例えば、4つの文書(A、B、C、D)が印刷対象リストに順次存在し、重要度が2 1 3 2の場合、CD A Bの順に印刷される.
ソリューション関数を作成してください.パラメータが現在のキュー・リスト内のドキュメントの重要度のソート順と、印刷を要求したドキュメントが現在のキュー・リスト内にある場所を指定した場合、印刷を要求したドキュメントの何回目の印刷かを返します.
[制限]
[I/O例]
I/O例説明
例1
問題の例は次のとおりです.
例2
6つの文書(A、B、C、D、E、F)は、印刷対象リストにおいて、重要度が1 1 1 1 9 1 1 1 1であり、C D E F A Bの順に印刷される.
問題を解く
コード1
これはいくつかの方法で解決できる問題です.最初はいくつかの方法で解くのではなく、for文でもっと大きな値があるかどうかを探索し、いくつかの方法で問題を解決することができます.
そして、locationの位置をどのように保存するかについて多くの問題を考え、他の怒りを晴らす方法を参考にして、以下のようにすることができます.
function solution(priorities, location) {
let answer;
let order=location;
let cnt=0; //인쇄된 것의 개수
while(priorities.length){
let compareNum=priorities.shift();
if(priorities.some(x=>x>compareNum)) priorities.push(compareNum);
else{
cnt++;
if(order===0){
answer=cnt;
return answer;
}
}
if(order===0) order=priorities.length-1;
else order--;
}
return answer;
}
コード2
これは他の人の解答の中で最も推薦数の多い解答方法です.
mapといくつかの方法で以下の説明を行うことができます.map関数を使うのはまだ硬いので難しいと思いますが、よく知っていれば、ずっと使っているかもしれません.
function solution(priorities, location) {
let answer;
let list = priorities.map((v, i)=> ({
my: i === location, val: v
}));
let count=0;
while(true){
let compareNum=list.shift();
if(list.some(t=>t.val>compareNum.val)){
list.push(compareNum);
}
else{
count++;
if(compareNum.my) return count;
}
}
console.log(list);
return answer;
}
整理する
これはいくつかの方法を再学習できる問題です.また,以前学んだmap関数の復習も可能である.
map関数もこの問題のように使えるなんて…!不思議
リファレンス
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/some
https://kyoung-jnn.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8JavaScript-%ED%94%84%EB%A6%B0%ED%84%B0-%EC%8A%A4%ED%83%9D%ED%81%90
Reference
この問題について([プログラマ高得点Kit]スタック/キュープリンタ(level 2)), 我々は、より多くの情報をここで見つけました https://velog.io/@rladpwl0512/프린터テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol