전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요.
-> 자세한 내용 보러가기
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
//가정 : 모든 학생은 체육복을 가지고 있다
int answer = n;
int[] students = new int[n + 1];
for(int idx = 1; idx < students.length; idx++){
//0번인 학생은 없음
students[idx] = 1;
}
//도난당한 체육복
for(int l : lost){
students[l]--;
}
//여벌을 가진 학생들이 체육복을 빌려줌
for(int r : reserve){
students[r]++;
}
//학생 수 계산
for (int i = 1; i <= n; i++) {
if (students[i] == 0) { //체육복이 없다면
if (i > 1 && students[i - 1] == 2) {
//앞 번호가 빌려주거나
students[i]++;
students[i - 1]--;
} else if (i < n && students[i + 1] == 2) {
//뒷 번호가 빌려줘야함
students[i]++;
students[i + 1]--;
} else {
//그렇지 않으면 수업을 들을 수 없음.
answer--;
}
}
}
return answer;
}
}
import java.util.HashSet;
import java.util.Set;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
Set<Integer> lostSet = new HashSet<>();
Set<Integer> reserveSet = new HashSet<>();
for (int l : lost) {
lostSet.add(l);
}
for (int r : reserve) {
if (lostSet.contains(r)) {
lostSet.remove(r);
} else {
reserveSet.add(r);
}
}
for (int r : reserveSet) {
if (lostSet.contains(r - 1)) {
lostSet.remove(r - 1);
} else if (lostSet.contains(r + 1)) {
lostSet.remove(r + 1);
}
}
return n - lostSet.size();
}
}