Search

체육복

알고리즘
탐욕법(Greedy)
플랫폼
프로그래머스
JCF
상태
해결
생성 일시
2023/12/28 09:18
최종 편집 일시
2024/01/02 10:42

문제 설명

해결과정

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
복사