✔️ 여분의 체육복을 갖고 있는 학생이 체육복을 잃어버린 경우
➡️ lost 배열과 reserve 배열에 동시에 있는 경우
➡️ 체육복을 잃어버렸지만 자기 것은 있고, 남에겐 빌려줄 수 없음
➡️ lost 배열과 reserve 배열에서 삭제!
반환 = 체육복을 입을 수 있는 학생 수 (count)
= 전체 학생 수 - 체육복을 잃어버린 학생 수
lost 배열과 reserve 배열의 요소를 비교해서, 같은 값이 있으면 해당 요소의 값을 -1로 바꿔주고, count += 1
➡️ 요소 삭제 대신 의미없는 값을 넣어줌
lost 배열과 reserve 배열의 요소를 비교하는데, reserve 의 학생이 lost 학생에게 빌려줄 수 있는 경우
➡️ lost가 reserve + 1
or reserve - 1
인 경우
➡️ reserve 학생이 다른 lost 학생에게 빌려주지 못하도록 해당 요소의 값을 -1로 바꿔주고, count += 1
➡️ 삭제 대신 의미 없는 값을 넣어줌
중복되는 값을 먼저 삭제하고, 빌려줄 수 있는 경우를 따로 해줘야하는데, 아무리 생각해도 같은 코드가 따로 두 번 쓰이는 게 싫어서 ArrayList, HashMap 등으로 코딩하려했으나 fail...
for 문 돌다가 삭제하면 오류나는 이유가 가장 컸음
int 배열로는 삭제가 어려우니까 절대 안하고 싶었지만 어쩔 수 없이 함
비슷한 코드가 두 번 나오는게 맘에 안들지만 결국 해결하긴 했음... 나의 최선.......
어떤 건 돌아가고 어떤 건 안 돌아가서 질문하기 페이지를 엄청나게 뒤져서 테스트케이스를 많이 얻었다 하하 (근데도 왜 틀린지 모르겠어서 그냥 갈아엎고 배열로 쉽게 해결)
// 프로그래머스 - 체육복
import java.util.*;
public class GymSuit {
public int solution(int n, int[] lost, int[] reserve) {
Arrays.sort(lost);
Arrays.sort(reserve);
int count = n - lost.length;
for (int i = 0; i < lost.length; i++) {
for (int j = 0; j < reserve.length; j++) {
if (lost[i] == reserve[j]) {
lost[i] = reserve[j] = -1;
count++;
}
}
}
for (int i = 0; i < lost.length; i++) {
for (int j = 0; j < reserve.length; j++) {
if (lost[i] == reserve[j] - 1 || lost[i] == reserve[j] + 1) {
lost[i] = reserve[j] = -1;
count++;
}
}
}
return count;
}
public static void main(String[] args) {
GymSuit gymSuit = new GymSuit();
System.out.println(gymSuit.solution(5, new int[]{2, 4}, new int[]{1, 3, 5})); // 5
System.out.println(gymSuit.solution(5, new int[]{2, 4}, new int[]{3})); // 4
System.out.println(gymSuit.solution(5, new int[]{2, 4}, new int[]{2})); // 4
System.out.println(gymSuit.solution(3, new int[]{3}, new int[]{1})); // 2
System.out.println(gymSuit.solution(5, new int[]{5}, new int[]{1})); // 4
System.out.println(gymSuit.solution(7, new int[]{2, 4, 7}, new int[]{1, 3, 5})); // 6
System.out.println(gymSuit.solution(8, new int[]{5, 6, 7 ,8}, new int[]{4, 7})); // 6
System.out.println(gymSuit.solution(5, new int[]{4, 2}, new int[]{3, 5})); // 5
System.out.println(gymSuit.solution(13, new int[]{1, 2, 5, 6, 10, 12, 13}, new int[]{2, 3, 4, 5, 7, 8, 9, 10, 11, 12})); // 11
}
}