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