문제 설명
해결과정
Solution.java
import java.util.*;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
// 배열 정렬
Arrays.sort(lost);
Arrays.sort(reserve);
// 배열 정리
if(lost.length < reserve.length) {
arrangeArray(reserve, lost);
} else if(lost.length > reserve.length) {
arrangeArray(lost, reserve);
} else {
arrangeArray(lost, reserve);
}
// 배열에서 0 제거
lost = deleteZero(lost);
reserve = deleteZero(reserve);
printarr(lost);
printarr(reserve);
int cnt = borrowGymSuit(lost, reserve);
answer = n - cnt;
return answer;
}
// 여분의 체육복이 있는 학생이 잃어버린 학생에게 체육복 대여
public int borrowGymSuit(int[] lost, int[] reserve) {
int j = 0;
int cnt = 0;
for(int i = 0; i < reserve.length; ) {
if(j == lost.length) {break;}
int able = reserve[i] - lost[j];
// 빌려줄 수 있다면
if(able <= 1 && able >= -1) {
reserve[i++] = 0;
lost[j++] = 0;
cnt++;
}
// 빌려줄 수 없다면
else {
if(reserve[i] < lost[j]) {
i++;
} else {
j++;
}
}
}
return lost.length - cnt;
}
// 배열에서 0이 있다면 제거
public int[] deleteZero(int[] nums) {
// 0의 개수를 저장하는 변수 cnt
int cnt = 0;
// 매개변수로 주어진 배열을 탐색하면 0의 개수를 센다.
for(int num : nums) {
if(num == 0) {cnt++;}
}
// 0의 개수를 제거한 배열을 새로 생성한다.
int[] arr = new int [nums.length - cnt];
// arr의 배열의 인덱스
int arrindex = 0;
// 매개변수로 주어진 배열을 탐색하면 원소의 값이 0이 아닐때 값을 arr에 저장한다.
for(int num : nums) {
if(num != 0) {
arr[arrindex++] = num;
}
}
return arr;
}
// 체육복을 잃어버린 학생이 체육복이 여분이 있다면 각 배열에서 제거
public void arrangeArray(int[] big, int[] small) {
int j = 0;
for(int i = 0; i < big.length; ) {
// small의 배열이 끝났다면 탈출
if(j == small.length) {break;}
// big과 small 여분의 체육복을 가져온 학생이 체육복을 잃어버렸다면 빌려줄 수 가 없고 체육수업에는 참가할 수 있다.
if(big[i] == small[j]) {
big[i] = 0;
small[j] = 0;
i++;
j++;
} else if (small[j] < big[i]) {
j++;
} else {
i++;
}
}
}
// 1차원 정수형 배열 출력하기
public void printarr(int[] nums) {
for(int num : nums) {
System.out.print(num + " ");
}
System.out.print("\n");
}
}
Java
복사