[JAVA-5]プログラマー1段階:スポーツウェア
2381 ワード
https://programmers.co.kr/learn/courses/30/lessons/42862?language=java
質問する
問題の説明
すべての学生の数n,ジャージを盗まれた学生の番号の並びloss,複数のジャージを持った学生の番号の並びreserveをパラメータとした場合,解関数を書いて体育の授業を受けられる学生の最上位値を返してください.
せいげんじょうけん
解法
int[] lost = {2,4};//...学生のグループが運動服の番号を盗まれた.
int[] reserve = {3};//運動服を何着も持っている学生の番号.
int[] people = new int[n];//体育の授業を受ける学生の最高価格は
(1) i = 2,4
people[i-1]->nの値は5で、配列は0から始まるので-1を与えます.
后ろの--私は私にあげたのは0だと思って、あなたに贷す価値がありません
(2) j = 1,3,5
people[i-1]->対応するインデックス値を-1に設定します.
余分な罰を与える学生は++で1を表す.
(3)iを0から5の長さの位置に移動し,
people[i]=-1の場合、
最初,人間の初期値は{0,0,0,0,0}であり,(1)と(2)の過程により,{0,1,1,1,1,1,0}であった.
ここでpeople[i]の値は0であり、これは運動服を失った人を意味する.
(4)ここで、最初(and)ではなく、私の前の人が1であることを知っていれば、余計な人を連れてきたら、i番目の人は0を借りて、前の人に-1をあげます.
(5)私は最後の人ではありません.私の後ろの人は1で、後ろの人から借ります.
(6)そして0の値を答えに入れて出力する.
問題を解く
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
int[] people = new int[n];
//(1)
for(int i: lost) {
people[i-1]--;
}
//(2)
for(int j: reserve) {
people[j-1]++;
}
for(int i=0; i<people.length;i++) {
//(3)
if(people[i] == -1) {
//(4)
if(i>0 && people[i-1] == 1) {
people[i]++;
people[i-1]--;
//(5)
}else if(i < people.length-1 && people[i+1] ==1) {
people[i]++;
people[i+1]--;
}
}
}
//(6)
for(int i : people) {
if(i == 0) {
answer++;
}
}
return answer;
}
}
Reference
この問題について([JAVA-5]プログラマー1段階:スポーツウェア), 我々は、より多くの情報をここで見つけました https://velog.io/@wldus9503/JAVA프로그래머스-1단계-체육복テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol