[プログラマ]プリンタ(Java)
18577 ワード
🔗 質問リンク
https://programmers.co.kr/learn/courses/30/lessons/42587#
👨🏻💻 イニシャルコード
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0; // 순서 count
int loc = location; // 출력하고자하는 값의 현재 위치를 나타내는 변수
int first; // List의 첫번째 값을 저장할 변수
List<Integer> jobList = new LinkedList<>();
for (int i: priorities)
jobList.add(i);
while (true) {
first = jobList.remove(0);
if (first >= Collections.max(jobList)) {
answer++;
if (loc == 0) break;
else loc--;
}
else {
jobList.add(first);
if (loc == 0)
loc = (jobList.size()-1);
else loc--;
}
}
return answer;
}
}
採点して問題が発生し、2,5,18回の運転時エラーが発生しました.コードの実行時間を短縮するために不要な収集.max(jobList)演算を減らしてみます.👨🏻💻 Collections.最大(jobList)演算のコードを減らす
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0; // 순서 count
int loc = location; // 출력하고자하는 값의 현재 위치를 나타내는 변수
int first; // List의 첫번째 값을 저장할 변수
int max;
List<Integer> jobList = new LinkedList<>();
for (int i: priorities)
jobList.add(i);
max = Collections.max(jobList);
while (true) {
first = jobList.remove(0);
if (first >= max) {
// max값을 매번 찾지 않도록 하여 연산 축소
max = Collections.max(jobList);
answer++;
if (loc == 0) break;
else loc--;
}
else {
jobList.add(first);
if (loc == 0)
loc = (jobList.size()-1);
else loc--;
}
}
return answer;
}
}
Collection.最大値を求める演算では、最大値が欠けている場合にのみ変更されますが、2,5,18の問題で実行時間が発生します.質問でテストデータセットに関する記事を見たとき、1つのデータだけを入れることを考えていないことに気づいたので、テストケースでは1つのデータだけを入れてテストしていたのですが、やはりNoSuchExceptionが発生しました.以下のようになります.
このエラーは、1つだけのリストからデータを削除したためにデータが空になり、空のリストで最大値を検索したときにエラーが発生したため、リストが空でない場合にのみ実行するための条件が追加され、問題が解決しました.
👨🏻💻 最終コード
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0; // 순서 count
int loc = location; // 출력하고자하는 값의 현재 위치를 나타내는 변수
int first; // List의 첫번째 값을 저장할 변수
int max;
List<Integer> jobList = new LinkedList<>();
for (int i: priorities)
jobList.add(i);
max = Collections.max(jobList);
while (true) {
first = jobList.remove(0);
if (first >= max) {
if (!jobList.isEmpty())
max = Collections.max(jobList);
answer++;
if (loc == 0) break;
else loc--;
}
else {
jobList.add(first);
if (loc == 0)
loc = (jobList.size()-1);
else loc--;
}
}
return answer;
}
}
📝 n/a.結論
コードを記述する際には,1つのデータの場合,データがない場合など,複数の状況を考慮し,問題解決に努めるべきである.また、問題が発生した場合は、エラーをチェックし、エラーの解決に努力する必要があります.みんなにExceptionの名前を見せるために、なぜExceptionが起こったのかを知る!!!
Reference
この問題について([プログラマ]プリンタ(Java)), 我々は、より多くの情報をここで見つけました https://velog.io/@seongwon97/프로그래머스-프린터-Javaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol