[プログラマー]コードテスト練習-貪欲な1級運動服
Solution.java class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
boolean[] robbed = new boolean[n];
boolean[] spare = new boolean[n];
for (int i = 0; i < lost.length; i++) robbed[lost[i] - 1] = true;
for (int i = 0; i < reserve.length; i++) {
if (robbed[reserve[i] - 1]) robbed[reserve[i] - 1] = false;
else spare[reserve[i] - 1] = true;
}
for (int i = 0; i < n; i++) {
if (robbed[i]) {
if (i > 0 && spare[i - 1]) {
robbed[i] = spare[i - 1] = false;
}
else if (i < n - 1 && spare[i + 1]) {
robbed[i] = spare[i + 1] = false;
}
}
if (!robbed[i]) answer++;
}
return answer;
}
}
問題を解決した後,他の人の解答を見て,配列の大きさをn+2と宣言すれば,追加の条件検査は必要ないことに気づいた.
今度似たような問題があったら、やってみます.
出典:プログラマーコードテスト練習、https://programmers.co.kr/learn/challenges
Reference
この問題について([プログラマー]コードテスト練習-貪欲な1級運動服), 我々は、より多くの情報をここで見つけました
https://velog.io/@hye07on11/프로그래머스-코딩테스트-연습-탐욕법Greedy-Level-1-체육복
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
boolean[] robbed = new boolean[n];
boolean[] spare = new boolean[n];
for (int i = 0; i < lost.length; i++) robbed[lost[i] - 1] = true;
for (int i = 0; i < reserve.length; i++) {
if (robbed[reserve[i] - 1]) robbed[reserve[i] - 1] = false;
else spare[reserve[i] - 1] = true;
}
for (int i = 0; i < n; i++) {
if (robbed[i]) {
if (i > 0 && spare[i - 1]) {
robbed[i] = spare[i - 1] = false;
}
else if (i < n - 1 && spare[i + 1]) {
robbed[i] = spare[i + 1] = false;
}
}
if (!robbed[i]) answer++;
}
return answer;
}
}
Reference
この問題について([プログラマー]コードテスト練習-貪欲な1級運動服), 我々は、より多くの情報をここで見つけました https://velog.io/@hye07on11/프로그래머스-코딩테스트-연습-탐욕법Greedy-Level-1-체육복テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol