왜 항상 문제들은 막상 해결하고 나면 어렵지 않게 느껴지는지..
잘 모르겠다 ㅎ
학생별 체육복 초기화 : 모든 학생에게 기본적으로 한 벌의 체육복을 할당한다.
Map<Integer, Integer> student = new HashMap<>();
for(int i = 0; i < n; i++) {
student.put(i + 1, 1);
}
체육복 도난 처리 : lost 배열을 순회하며 체육복을 잃어버린 학생의 체육복을 0으로 할당한다.
for(int i = 0; i < lost.length; i++) {
student.replace(lost[i], 0);
}
여벌 체육복 처리 : reserve 배열을 순회하며 여벌의 체육복을 가진 학생의 체육복 수를 증가시킨다.
이 때 여벌의 체육복을 가진 학생이 체육복을 도난 당했다면 그 학생의 체육복의 수는 한 벌이다.
for(int i = 0; i < reserve.length; i++) {
student.replace(reserve[i], student.get(reserve[i]) + 1);
}
체육복 빌려주기 : 모든 학생을 순회하며, 여벌의 체육복이 있는 학생이 앞이나 뒤 학생에게 빌려줄 수 있는지 확인한다.
for(int i = 1; i <= n; i++) {
int num = student.get(i);
if(student.get(i - 1) != null && student.get(i - 1) == 0 && num == 2) {
student.replace(i - 1, 1);
student.replace(i, 1);
}
if(student.get(i + 1) != null && student.get(i + 1) == 0 && num == 2) {
student.replace(i + 1, 1);
student.replace(i, 1);
}
}
체육 수업에 참여할 수 있는 학생 수 : 체육복이 없는 학생의 수를 카운트한다.
for(int i = 1; i <= n; i++) {
if(student.get(i) != 0) answer++;
}
전체 코드
import java.util.*;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
Map<Integer, Integer> student = new HashMap<>();
for(int i = 0; i < n; i++) {
student.put(i + 1, 1);
}
for(int i = 0; i < lost.length; i++) {
student.replace(lost[i], 0);
}
for(int i = 0; i < reserve.length; i++) {
student.replace(reserve[i], student.get(reserve[i]) + 1);
}
for(int i = 1; i <= n; i++) {
int num = student.get(i);
if(student.get(i - 1) != null && student.get(i - 1) == 0 && num == 2) {
student.replace(i - 1, 1);
student.replace(i, 1);
num = student.get(i);
}
if(student.get(i + 1) != null && student.get(i + 1) == 0 && num == 2) {
student.replace(i + 1, 1);
student.replace(i, 1);
num = student.get(i);
}
}
for(int i = 1; i <= n; i++) {
if(student.get(i) != 0) answer++;
}
return answer;
}
}