[JAVA-5]プログラマー1段階:スポーツウェア

2381 ワード


https://programmers.co.kr/learn/courses/30/lessons/42862?language=java

質問する


問題の説明
すべての学生の数n,ジャージを盗まれた学生の番号の並びloss,複数のジャージを持った学生の番号の並びreserveをパラメータとした場合,解関数を書いて体育の授業を受けられる学生の最上位値を返してください.

せいげんじょうけん

  • 全体の生徒数は2名以上30名以下であった.
  • 運動服を盗まれた生徒数は1名以上n名以下で重複番号はない.
  • 着以上のユニフォームの学生数は1名以上n名以下で、重複番号はありません.
  • 着以上の運動服を持っている学生だけが他の学生に運動服を貸すことができます.
  • 着以上の運動服を持っている学生は盗まれたかもしれません.このとき、この学生は1枚の運動服だけが盗まれたと仮定し、1枚の運動服しか残っていないため、他の学生に運動服を貸すことができない.

  • 解法

  • int n = 5;//学生総数
    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;
        }
     }