import java.util.*;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = n - lost.length; // 잃어버리지 않은 학생 먼저 추가
HashSet<Integer> reserveSet = new HashSet<>();
HashSet<Integer> lostSet = new HashSet<>();
// reserve를 Set으로 변환
for (int r : reserve) {
reserveSet.add(r);
}
// 여벌이 있으면서 잃어버린 학생 체크 및 제거
for (int l : lost) {
if (reserveSet.contains(l)) {
reserveSet.remove(l);
answer++;
} else { // 여벌 있고 잃어버린 게 아닐 경우에만 lostSet에 추가
lostSet.add(l);
}
}
// 남은 도난당한 학생들에게 체육복 빌려주기
for (int l : lostSet) {
if (reserveSet.contains(l - 1)) {
reserveSet.remove(l - 1);
answer++;
} else if (reserveSet.contains(l + 1)) {
reserveSet.remove(l + 1);
answer++;
}
}
return answer;
}
}
테스트 1 〉 통과 (0.08ms, 74.1MB)
테스트 2 〉 통과 (0.08ms, 71.4MB)
테스트 3 〉 통과 (0.08ms, 76MB)
테스트 4 〉 통과 (0.09ms, 67.1MB)
테스트 5 〉 통과 (0.06ms, 75.4MB)
테스트 6 〉 통과 (0.08ms, 83.1MB)
테스트 7 〉 통과 (0.11ms, 77.1MB)
테스트 8 〉 통과 (0.08ms, 67.4MB)
테스트 9 〉 통과 (0.09ms, 81.5MB)
테스트 10 〉 통과 (0.11ms, 71.8MB)
테스트 11 〉 통과 (0.09ms, 76.8MB)
테스트 12 〉 통과 (0.07ms, 75.8MB)
테스트 13 〉 통과 (0.09ms, 72MB)
테스트 14 〉 통과 (0.08ms, 65.8MB)
테스트 15 〉 통과 (0.08ms, 76.8MB)
테스트 16 〉 통과 (0.11ms, 78MB)
테스트 17 〉 통과 (0.08ms, 69.8MB)
테스트 18 〉 통과 (0.07ms, 75.8MB)
테스트 19 〉 통과 (0.07ms, 74.4MB)
테스트 20 〉 통과 (0.06ms, 70.8MB)
테스트 21 〉 통과 (0.08ms, 67.9MB)
테스트 22 〉 통과 (0.05ms, 65.8MB)
테스트 23 〉 통과 (0.06ms, 76.6MB)
테스트 24 〉 통과 (0.05ms, 74.5MB)
테스트 25 〉 통과 (0.09ms, 72.9MB)
테스트 26 〉 통과 (0.07ms, 83.9MB)
테스트 27 〉 통과 (0.07ms, 72.1MB)
테스트 28 〉 통과 (0.08ms, 74.9MB)
테스트 29 〉 통과 (0.06ms, 74.7MB)
테스트 30 〉 통과 (0.07ms, 76.2MB)
1) +와 -를 같이 체크
if (reserveSet.contains(l - 1) || reserveSet.contains(l + 1)) {
reserveSet.remove(r);
answer++;
}
2) 여벌이 있으면서 잃어버린 학생을 lost 배열에서 값 제거 안 함
// 여벌이 있으면서 잃어버린 학생 체크
for(int l :lost){
for (int r : reserve){
if(l == r){
reserveSet.remove(r);
}
}
}
체육복을 빌리지 않아도 되는데 빌리게 되는 경우 발생
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int[] people = new int[n];
int answer = n;
// people 배열은 -1, 0, 1 중 하나로 체육복 갯수를 저장
for (int l : lost)
people[l-1]--;
for (int r : reserve)
people[r-1]++;
//
for (int i = 0; i < people.length; i++) {
// 빌려야 하는 경우
if(people[i] == -1) {
// 앞 사람이 체육복이 있을 때
if(i-1>=0 && people[i-1] == 1) {
people[i]++; // 빌렸음
people[i-1]--; // 빌려준 사람 갯수 --
// 뒷 사람이 체육복이 있을 때
}else if(i+1< people.length && people[i+1] == 1) {
people[i]++;
people[i+1]--;
}else // 못 빌렸을 때
answer--;
}
}
return answer;
}
}